我正在尝试反汇编一个包含简单函数的简单程序。该程序是使用 gcc 为 32 位 x86 目标编译的。该函数通过call指令调用。在函数的末尾,我看到一条ret指令,这是正常的,但还有一条leave指令。程序中任何地方都没有输入指令。我想知道这个离开的功能是什么......
小智 5
离开: 离开堆栈区域。离开与进入相反。因此,通过 Enter 保留的堆栈区域被释放。
Ret: 从程序返回。Ret 终止过程的执行并将控制流转移到调用程序。Ret 有一个可选的字操作数。这表示从堆栈中取出返回地址后要在堆栈上删除的字节数。
enter是缓慢的同义词
push ebp
mov ebp, esp
sub esp, imm
Run Code Online (Sandbox Code Playgroud)
leave是一个相当快的同义词
mov esp, ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)
您不必拥有一个enter即可使用leave. 它只是堆栈清理寄存器舞蹈的简写。