在我看到的大多数 x86 程序集(特别是 NASM)代码示例中(甚至在 GCC 生成的代码示例中),我看到了所谓的“堆栈框架设置”。像这样:
main:
/*setting the stack frame*/
push ebp
mov ebp,esp
...
code goes here
...
/*removing the stack frame*/
mov esp, ebp
pop ebp
我对这种做法有 3 个问题:
如果我的代码没有触及堆栈,那么如上所述设置/删除堆栈框架是完全没用的,对吧?
即使我的代码使用堆栈,只要弹出我推送的所有内容(本质上保持堆栈不变)然后再次设置堆栈框架是完全没用的,对吧?
在我看来,这样做的唯一目的是保存 ESP 的值,这样我就可以在我的代码中使用它,而不必担心把事情搞砸,一旦我完成了,我只需恢复它的原始值。这是堆栈框架设置的目的还是我遗漏了什么?
谢谢