【发布时间】:2014-03-04 02:39:25
【问题描述】:
我读到例如“lea eax, [ebp - 120]”的意思是
mov eax, ebp
sub eax, 120
假设 esp 在 ebp-200,然后在函数后面
lea eax, [ebp - 120]
push eax
call xyz
这是否意味着 ebp-120 的值被加载到 eax 寄存器中,然后这个 4 字节的值被压入堆栈?或者这是否意味着 esp 进一步递减 120,从而创建了一个从 ebp-200 到 ebp-320 的缓冲区,而 esp 现在位于 ebp-320?
【问题讨论】:
-
你的第一个解释是正确的。
-
push eax将eax寄存器的内容压入堆栈。 -
代码正在传递一个指向局部变量的指针。存储在 ebp-120 处调用者的堆栈帧中。很常见。与 esp 没有任何关系,除了在调用者的函数入口处,需要调整 esp 值以为局部变量腾出空间。许多教程和书籍都很好地描述了堆栈帧的工作方式。
-
你们能看看这个吗? stackoverflow.com/questions/30007738/…