- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的 C 代码:
int test(int x, int y){
int val=4*x;
if (y>0){
if (x<y) val=x-y;
else val=x^y;
}
else if (y<-2) val=x+y;
return val;
}
这是我在 GCC 命令行中输入的内容:
gcc -O1 -S -march=i686 test.c
这是我得到的S文件(只有计算部分):
pushl %ebx
movl 8(%esp), %ecx
movl 12(%esp), %edx
testl %edx, %edx
jle L2
movl %ecx, %eax
subl %edx, %eax
movl %edx, %ebx
xorl %ecx, %ebx
cmpl %edx, %ecx
cmovge %ebx, %eax
jmp L4
L2:
leal 0(,%ecx,4), %eax
addl %edx, %ecx
cmpl $-2, %edx
cmovl %ecx, %eax
L4:
popl %ebx
ret
我的问题是:我可以使用上面的 S 文件取回完全相同的 C 代码吗?我的意思完全一样。例如,我可以确定 val
的默认值是 4*x
(C 代码的第 2 行)吗?我可以确定每个 if
语句的测试表达式吗?
我真的需要你的帮助。谢谢!!!
最佳答案
在这种情况下,你可以发现每个寄存器对应一个变量:
%eax
- var
%ebx
- 上下文临时变量%ecx
- x
%edx
- y
如果您的意思是“完全”用于标识符,则只有在名为“符号表”的特殊结构时才有可能。 (在 GCC 中使用 -g
标志编译)
无论如何,您应该知道编译器总是可以优化代码。这意味着,在这种情况下,您的代码将更改为另一个具有相同数学含义的代码。如果你的代码是反向翻译的,它应该是这样的。
int test(int x, int y) {
int val;
if (y > 0) {
if (x < y)
val = x - y;
else
val = x ^ y;
} else {
if (y < -2)
val = x + y;
else
val = 4 * x;
}
return val;
}
如果您不想优化,请使用标志 -O0
而不是 -O1
。
关于c - 使用 GCC -march=i686 逆向工程 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480649/
到目前为止我的代码:月 = 月.substring(0,1).toUpperCase() + 月.substring(1);当我输入 March 时,它会显示为 March,这就是我想要的。但是如果我
我收到以下警告:。当我将-mcPU设置为CORACLE-R4或CORACLE-R4F时,我没有得到这个问题。由于Cortex R5是相同的ARMv7-r架构,我猜这是GCC工具链中的一个错误?我目前使
With GCC可以打印出-march=native触发的特定标志。 Clang是否可以打印类似的信息? 最佳答案 可以使用-help=target来打印出编译命令,而不是使用(在clang中不存在)
编译器(例如:gcc)中的 -march 标志真的很重要吗? 如果我使用 -march=my_architecture 而不是 -march=i686 编译所有程序和内核,会不会更快 最佳答案 是的,
为什么我在运行以下代码时得到两个 March 而不是 February 然后 March? 输出: 01:January 02:March 03:March 04:April 05:May 06:J
我正在编写一个 C++ 程序,用于求解网络上的偏微分方程和代数方程。Eigen 库承担了大部分工作,通过 LU 分解求解许多稀疏线性系统。 由于性能总是很好,所以我尝试了一些选项。我正在使用 g++
我的应用程序极大地受益于高级 CPU 功能,gcc 在使用 -march native 运行时可以访问这些功能。 Docker 可以消除操作系统的差异,但它如何处理不同的 CPU?要构建一个可以在任何
这个问题已经有答案了: How to see which flags -march=native will activate? (5 个回答) 已关闭 4 年前。 目前我们在相同的硬件上编译和运行代码
我正在寻找 vtk 的行进立方体的替代方案。它必须与 python 绑定(bind)。存在吗? 最佳答案 pythonisosurfaces包含一个实现here ,尽管它需要与其 web 应用程序的装
我正在制作一个使用“齿轮和链条”的 CSS 动画,但无法创建“平滑”的边框旋转序列。 你可以在这个fiddle中看到我(目前)如何使用伪元素来生成“旋转”效果。这是通过在白色虚线和金色虚线边框之间“切
Gentoo Wiki告诉我以下内容: Warning: GCC 4.2 and above support -march=native. -march=native applies addition
我需要能够准确地检测和响应与任何位图地形的碰撞,最好的方法似乎是使用 Marching Squares 生成多边形网格,然后我可以将其与 Bullet 等物理引擎一起使用,这比我自己写的任何东西都要好
我尝试为此擦洗 GCC 手册页,但仍然没有明白,真的。 -march 和 -mtune 之间有什么区别? 什么时候只使用-march,什么时候同时使用两者?是否可以仅-mtune? 最佳答案 如果您使
我正在使用 GCC 4.3 编译我的 C++ 应用程序。我没有手动选择优化标志,而是使用 -march=native,理论上它应该添加适用于我正在编译的硬件的所有优化标志。但我如何检查它实际使用了哪些
对于大多数 C/C++ 编译器,都有一个可传递给编译器的标志 -march=native,它告诉编译器针对主机 CPU 的微架构和 ISA 扩展调整生成的代码。即使名称不同,基于 LLVM 的编译器通
如何安装STS来eclipseoxy(2018.march) 市场上没有sts?我已经使用帮助>安装软件>解压文件夹>手动尝试过,但它不起作用 最佳答案 如果您对 Spring Tools 4 感兴趣
我正在编译程序: #include #include #include #include struct Model { int open, extend; }; struct Cell
我想要按以下格式给出日期格式:1990 年 3 月 1 日。日期格式应为 YYYY-MM-DD。我有以下代码。它给了我一个无法解析的日期。由此我可以理解,这不是格式化该日期的正确方法,因为它不是有效的
我的云服务器上的底层架构最近发生了变化,看起来像我在使用 gcc -march=native (Ubuntu 14.04, gcc 4.8) 编译的代码时遇到了麻烦 它过去总是在 16 核 Intel
我目前正在实现 Marching Squares用于计算等高线曲线,我对此处提到的位移位的使用有疑问 Compose the 4 bits at the corners of the cell to
我是一名优秀的程序员,十分优秀!