下图来自维基百科 entry 在调用堆栈上,有一些我不完全理解的东西:
我认为存储在 ebp 寄存器中的帧指针在序言 * 中是这样初始化的:
push ebp ; Preserve current frame pointer
mov ebp, esp ; Create new frame pointer pointing to current stack top
sub esp, 20 ; allocate 20 bytes worth of locals on stack.
如果是这样,那么图像中的帧指针不应该指向返回地址之后、之前的帧指针地址和返回地址之前吗?我错过了什么?
谢谢!
*取自:What is exactly the base pointer and stack pointer? To what do they point?
最佳答案
是的,你是对的,帧指针指向一个地址,在返回地址之前存储前一帧指针。正确的图片应该是
| locals
+---------
frame pointer->| prev frame pointer
+--------
| return address
+--------
关于assembly - 帧指针、epb 和返回地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4426274/