我正在尝试反汇编一个包含简单函数的简单程序。该程序使用gcc编译为32位x86目标。 该函数通过调用指令调用。 在函数结束时,我看到一个ret指令,这是正常的,但也有一个leave指令。程序中没有任何输入指令。 我想知道这有什么功能......
答案 0 :(得分:2)
<强> 保留: 强> 离开堆栈区域。 离开这是相反的进入。因此,Enter堆栈区域的重新发布将被释放。
<强> 惩戒: 强> 从程序返回。 Ret终止执行过程并将控制流转移到调用程序。 Ret有一个可选的单词操作数。这表示在从堆栈中取出返回地址后,要在堆栈上删除的字节数。
答案 1 :(得分:2)
相似但不相等。 先阅读 Enter vs Push
输入: ,预留堆栈区域。 使用“Enter”,您可以保留堆栈的特定内存区域,这是参数传递所必需的。单词操作数指定要在堆栈上分配的字节数。 Byteoperand表示当前的过程嵌套。如果Byteoperand 0,EBP被放置在堆栈上。随后,ESP的值被复制到EBP,ESP由单词操作数递减。