实验一:反汇编一个简单的C程序
1.首先创建c文件 ,并编辑

2.编辑main.c文件

3.编译main.c代码文件
4.生成目标文件a.out并查看程序的返回值

5.使用echo命令查看返回值,程序的返回值为38。

6.打开main.s,main.s汇编文件还有一些“.cfi_”打头的字符串等等。简化一下代码,在VIM中,使用“g/\.s*/d”命令可以获得简化的汇编代码。
7.简化后的汇编代码

6.汇编代码分析
g:
pushl %ebp //将ebp的值压入栈内
movl %esp, %ebp //将ebp寄存器同样指向esp寄存器指向的那块栈地址
movl 8(%ebp), %eax //将15压入eax栈中
addl $13, %eax //执行15+13
popl %ebp
ret
f:
pushl %ebp //分配新的栈空间
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax //将8(%ebp寄存器的内容压入eax栈中
movl %eax, (%esp) //将eax寄存器中的内容存入(%esp)寄存器中
call g //调用g函数
leave
ret
main: //开始执行
pushl %ebp //esp沿着地址递减的方向指向下一个存储单元,将ebp现在指向的存储 //单元的地址压入栈中
movl %esp, %ebp //将ebp寄存器同样指向esp寄存器指向的那块栈地址
subl $4, %esp //将esp寄存器的内容减4,向下一个帧移动
movl $15, (%esp) //立即数15入栈
call f //调用f函数
addl $1, %eax //返回值+1
leave
ret
本文介绍了通过实验反汇编一个简单的C程序的过程。实验包括创建C源文件、编译生成可执行文件、查看程序返回值及简化并分析汇编代码。通过分析,读者可以了解C语言程序如何被转换成汇编指令。
433

被折叠的 条评论
为什么被折叠?



