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