它说,“离开”指令类似:大会86 - “离开”指令
movl %ebp, %esp
popl %ebp
我明白movl %ebp, %esp
的一部分,它的作用是释放存储内存(如this question讨论) 。
但是popl %ebp
代码的目的是什么?
它说,“离开”指令类似:大会86 - “离开”指令
movl %ebp, %esp
popl %ebp
我明白movl %ebp, %esp
的一部分,它的作用是释放存储内存(如this question讨论) 。
但是popl %ebp
代码的目的是什么?
LEAVE
是ENTER
的对应物。所述ENTER
指令由第一推EBP
到堆栈中,然后复制到ESP
EBP
建立一个堆栈帧,所以LEAVE
具有做相反,即复制EBP
到ESP
,然后恢复旧EBP
从堆栈。
见命名程序段中的调用块结构语言在Intel's Software Developer's Manual第1卷,如果你想了解更多关于如何ENTER
和LEAVE
工作。
看来我不理解EBP和ESP的概念。你能为我解释这两个条款吗? – alexswo
'EBP'和'ESP'都只是32位通用寄存器。虽然'ESP'有一个特殊的函数,它作为堆栈指针,并且通过某些指令(例如'push','pop','call')被隐式修改。按照约定,“EBP”通常用作函数内的堆栈帧指针。 – Michael
[在分解代码中的ebp和esp是什么意思?](http://stackoverflow.com/questions/26684506/what-does-ebp-and-esp-in-a-dissembly-code-means)[什么是ESP和EBP注册?](http://stackoverflow.com/questions/21718397/what-are-the-esp-and-the-ebp-registers?rq=1) –
它弹出'ebp'。 – immibis
“重复问题”实际上并不回答这个问题;投票重新开放...... – immibis