【发布时间】:2018-01-24 16:16:57
【问题描述】:
在这个答案:https://stackoverflow.com/a/8646611/192359 中,解释了在调试 x86 代码时,即使使用 FPO(帧指针省略),符号也允许调试器显示调用堆栈。
给出的解释是:
在 x86 PDB 上包含 FPO 信息,允许调试器可靠地展开调用堆栈。
我的问题是这些信息是什么?据我了解,仅知道函数是否具有 FPO 并不能帮助您找到堆栈指针的原始值,因为这取决于运行时信息。
我在这里错过了什么?
【问题讨论】:
-
IDK Windows 做了什么,但 Linux (System V ABI) 等效堆栈展开信息 (
.eh_frame) 记录哪些指令地址推送哪个调用保留寄存器,因此有足够的信息来展开堆栈并恢复寄存器。大概这也是 Windows ABI 使用的那种 FPO 信息。 (您可以使用或不使用将符号映射到 var 名称的其他调试信息。)
标签: windows debugging x86 symbols callstack