【发布时间】:2016-10-28 01:47:03
【问题描述】:
我正在尝试反汇编一个包含简单函数的简单程序。这个程序是用 gcc 为 32 位 x86 目标编译的。 该函数通过调用指令调用。 在函数的最后,我看到了一个ret指令,这很正常,但也有一个离开指令。程序的任何地方都没有输入指令。 我想知道这个离开功能是什么......
【问题讨论】:
我正在尝试反汇编一个包含简单函数的简单程序。这个程序是用 gcc 为 32 位 x86 目标编译的。 该函数通过调用指令调用。 在函数的最后,我看到了一个ret指令,这很正常,但也有一个离开指令。程序的任何地方都没有输入指令。 我想知道这个离开功能是什么......
【问题讨论】:
离开: 离开堆栈区。 离开这是相反的进入。这样进入栈区的资源就被释放了。
退休: 从程序返回。 Ret 终止执行一个过程并将控制流转移到调用程序。 Ret 有一个可选的字操作数。这表示从堆栈中取出返回地址后,您希望在堆栈上删除的字节数。
【讨论】:
相似但不相等。 先读 Enter vs Push
输入: , 预留一个堆栈区。 使用“Enter”可以保留堆栈的特定内存区域,这是传递参数所需的。字操作数指定要在堆栈上分配的字节数。字节操作数表示当前的过程嵌套。如果字节操作数为 0,则 EBP 被放入堆栈。随后,ESP的值被复制到EBP中,ESP按字操作数递减。
【讨论】: