【发布时间】:2017-07-14 22:01:19
【问题描述】:
我读到 SFP 用于将 EBP 恢复到之前的值。为什么EBP需要恢复到初始值?
【问题讨论】:
-
C 语言甚至没有提到堆栈,也没有提到特定的寄存器。
-
"EBP 寄存器 — 有时称为帧指针 (FP) 或本地基址 (LB) 指针 — 用于引用当前堆栈帧中的局部函数变量。每个堆栈帧包含参数函数、它的局部变量和两个将事物恢复原状所必需的指针:保存的帧指针 (SFP) 和返回地址。SFP 用于恢复 EBP恢复到之前的值,返回地址用于将 EIP 恢复到函数调用后找到的下一条指令。 " @Olaf
-
请提供对定义此寄存器并要求 C 实现完全使用堆栈的标准的参考。阅读How to Ask 并使用 [ŧour] 查看标签的用途以及问题应包含的内容。
-
因为按照惯例调用者正在使用它(或者我们假设是这种情况)并希望它在整个调用过程中被保留。
标签: cpu-registers machine-code stack-pointer