【发布时间】:2013-07-03 01:41:58
【问题描述】:
这是我的 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 语句的测试表达式吗?
我真的需要你的帮助。谢谢!!!
【问题讨论】:
-
没有。例如,无法确定变量名称。
标签: c gcc assembly reverse-engineering