为什么在x86程序集中执行"mov esp,ebp"?

com*_*fan 62 x86 assembly

据说该leave指令与以下内容相同:

mov esp,ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)

但这是mov esp,ebp为了什么?这对我来说似乎没有用......

zne*_*eak 90

mov esp,ebp将堆栈指针设置为基本帧地址,有效地释放整个帧.(不要忘记这是英特尔语法,目标首先出现.)如果你没有这样做,一旦你打电话ret,你仍然会使用被调用函数的堆栈框架与你的调用函数,带来崩溃的后果.

  • @Decave,这取决于你是否使用AT&T风格的反汇编或英特尔风格的反汇编.由于指令没有长度后缀,并且寄存器没有以'%`为前缀,我们讨论的是英特尔风格,其中目标首先出现.对于这个问题的等效AT&T风格的反汇编,您可能会想到并且目的地在哪里,将是`movl%ebp,%esp`. (16认同)