接06_01_反汇编一个简单的C程序
链接: 06_01_反汇编一个简单的C程序.
在上节的汇编代码中可以看到leave指令是什么意思呢?
enter,leave为宏指令可以认为是另外一些指令组成的
- enter ——> pusl %ebp; movl %esp, %ebp
- 假设不是空栈
- pushl %esp
ebp(1)为ebp当时指向的标记1的内存地址。
- movl %esp,%ebp
ebp = esp
从堆栈变化可以看出,enter指令的效果就是设置一个新的空栈,一般出现在准备函数调用的时候。
- leave ——> movl %ebp, %esp; popl %ebp
- 假设不是空栈
- movl %ebp,%esp
esp = ebp
- popl %ebp
将栈中的值弹出附给ebp
可以看出实际就是丢掉一段堆栈,一般出现在准备退出当前函数时。
- 下一节将逐条分析06_01_反汇编一个简单的C程序中汇编代码在堆栈中的分布状况。