帧指针,epb和返回地址

Spe*_*ETC 3 assembly callstack windbg calling-convention

下面的图片来自维基百科条目调用堆栈,有些东西我完全不理解:

替代文字

我认为存储在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. 
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么图像中的帧指针是否应该指向返回地址之后和它应该是前一帧指针地址之前和之前的返回地址?我错过了什么?

谢谢!

*取自:什么是基本指针和堆栈指针?他们指出了什么?

Aby*_*byx 6

是的,你是对的,帧指针指向一个地址,在该地址存储前一帧指针,返回地址之前.正确的图片将是

               | locals
               +---------
frame pointer->| prev frame pointer
               +--------
               | return address
               +--------
Run Code Online (Sandbox Code Playgroud)

  • @SpeksETC:最后一项位于堆栈顶部 (2认同)