为什么x86汇编中的第一个参数从偏移量8开始?

时间:2017-03-13 19:07:04

标签: assembly x86 stdcall

我正在努力培养对汇编语言的理解。我知道当函数创建堆栈帧时,它会推送当前EBP,而不是将堆栈指针值复制到EBP。第一个(也是唯一的)函数参数由EBP + 8访问。但为什么8?推送EBP后的下一个值在逻辑上偏移4.我读了很多网页,但似乎我不理解这一部分。

1 个答案:

答案 0 :(得分:4)

"失踪" DWORD是返回地址。调用堆栈看起来像:

ebp     : saved ebp
ebp + 4 : return address
ebp + 8 : pushed parameter

然后如果函数使用局部变量,因为堆栈空间(通常)是为堆栈帧之后的那些保留的,所以它们被引用为ebp - xx

ebp - 8 : second local
ebp - 4 : first local
ebp     : saved ebp
ebp + 4 : return address
ebp + 8 : pushed parameter