1.汇编代码分析
说明:
文章是在学习《Linux内核分析》时所写的。然后在实验楼做了实验,所以这算是实验报告。
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
main.c 内容如下:
----------------------
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}
----------------------
然后使用命令: gcc -S main.c -m32 -o main.s
由于生成的内容比较多,所以删除了伪指令。
main.s内容如下:
----------------------
g:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
addl $3, %eax
popl %ebp
ret
f:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call g
leave
ret
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $8, (%esp)
call f
addl $1, %eax
leave
ret
----------------------
现在开始分析汇编代码执行过程:
说明:
- 比如说movl,最后面的'l' 表示这是32位操作
- leave 相当于
- movl %ebp, %esp
- popl %ebp;
pushl %ebp相当于
esp-=4
movl %ebp (%esp)
自己制作了一张动图,演示了执行的整个过程。图中有些错误,现在也不想修改了。