实验一:反编译一个简单的c语言程序
1.首先生成一个main.c文件
2.对main.c文件进行编写,参数换成了我的学号
3. 使用gcc –S –o main.s main.c -m32命令对main.c进行编译,再查看
4.对汇编语言进行分析
在main函数中:
pushl %ebp:把EBP寄存器即栈基指针的值压栈
movl %esp, %ebp:将ebp寄存器同样指向esp寄存器指向的那块栈地址
subl $4,%esp:将esp寄存器的内容减32,即向下移动八个帧
movl $15, (%esp):将数值15存储到刚刚分配的个单元
call f:调用f函数
leave:撤销执行main函数建立的堆栈
ret:函数返回
在f函数中:
pushl %ebp:把EBP寄存器即栈基指针的值压栈
movl %esp, %ebp:保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针
subl $4,%esp:栈顶指针下以4个单位,分配一个单元
movl 8(%ebp), %eax:栈基指针的内容加上8对应的存储单元的内容传送给累加寄存器EAX
movl %eax,( %esp):把EAX内容拷贝给栈顶指针所指的位置
call g:调用g函数
在g函数中:
pushl %ebp:把EBP寄存器也即栈基指针的值压栈
movl %esp, %ebp:保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针
movl 8(%ebp), %eax:栈基指针的内容加上8对应的存储单元的内容传送给累加寄存器EAX
pool %ebp:恢复函数f的函数调用栈基指针
ret:函数返回