下图来自维基百科 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/

10-15 00:54