by zhangqingyu 原创作品转载请注明出处
实验中 main.c 程序如下
int g(int x){
return x + 10;
}
int f(int x){
return g(x);
}
int main(void){
return f(8) + 1;
}
通过反汇编指令
gcc –S –o main.s main.c -m32
(注:1.其中 -m32 指生成32位X86汇编指令代码,同理 -m64 指生成64位汇编代码
2.也可以使用 gcc -g main.c objdump -S)
得到main.s反汇编文件
1 g:
2 pushl %ebp
3 movl %esp, %ebp
4 movl 8(%ebp), %eax
5 addl $10, %eax
6 popl %ebp
7 ret
8
9 f:
10 pushl %ebp
11 movl %esp, %ebp
12 subl $4, %esp
13 movl 8(%ebp), %eax
14 movl %eax, (%esp)
15 call g
16 leave
17 ret
18
19 main:
20 pushl %ebp
21 movl %esp, %ebp
22 subl $4, %esp
23 movl $8, (%esp)
24 call f
25 addl $1, %eax
26 leave
27 ret
下面对反汇编文件进行分析:
到此分析完毕。
实验截图: