作者:何新宇 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
下面是一段简单的C语言程序
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(47) + 1;
}
在linux系统中通过
gcc –S –o main.s main.c -m32
反编译得到汇编代码,精简后如下:
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 $47, (%esp)
call f
addl $1, %eax
leave
ret
精简后的汇编代码,与c的程序执行顺序相同,从main开始,通过对ebp,esp的控制,以及call指令对eip的控制,来达到函数调用和返回。
x86平台 通过反汇编简单的从程序,分析理解计算机是如何工作的。
最新推荐文章于 2024-05-03 01:06:21 发布