积极EBP参考的目的是什么?

时间:2017-10-19 19:43:25

标签: assembly x86 stack

如果堆栈向下增长,并且EBP指向堆栈的基础,那么为什么我会看到mov eax [ebp + 4]这样的操作。这不会引用当前堆栈帧之外的变量吗?

1 个答案:

答案 0 :(得分:3)

在调用函数之前,参数会被压入堆栈。

在函数开始时,按下EBP以及需要保存的任何其他寄存器,然后将EBP设置为等于ESP。

如果在函数中声明了变量,例如C自动变量,则ESP递减以在EBP和ESP之间留出空间来保存这些变量。

因此EBP+offset用于参数,EBP-offset用于局部变量。

在函数返回之前,ESP被设置回EBP,然后堆栈被解开。