【发布时间】:2018-03-31 22:52:29
【问题描述】:
如果堆栈向下增长,并且 EBP 指向堆栈的底部,那么为什么我会看到 mov eax [ebp + 4] 这样的操作。这不会引用当前堆栈框架之外的变量吗?
【问题讨论】:
-
ebp + offset 用于引用函数变量
-
函数变量是什么意思?我想这取决于调用约定,但我的理解是参数要么被推入堆栈(因此是负引用]),要么存储在注册表中。
-
如果您在函数开始处推送其他任何内容之前运行
push ebp/mov ebp, esp,则[ebp+4]将保存由call指令推送的返回地址。[ebp + 8]是第一个(非注册)arg / 参数。 (不是局部变量)