1

我不明白 dwarf2 中的堆栈展开如何确保在一些非常基本的 ABI(应用程序二进制接口)场景中可靠地恢复参数。考虑一个 ABI,它表示前三个参数必须在寄存器上并且在堆栈上。据我了解,dwarf2 堆栈展开机制确保如果 CFI 表被正确填充,则可以在当前帧的调用点获取寄存器的值。但是,这并不能让您进入调用者的序言并知道参数寄存器的内容是什么。所以,我认为应该有一种方法可以在不同点的同一帧中找到寄存器的值(在 .debug_frame 部分中编码的表只给出了前一帧中的位置)。

我的理解有什么问题吗?在这种情况下,基于 dwarf2 调试格式的调试器如何工作?对于在堆栈上传递参数的架构,恢复程序中所有点的值(对于任何帧)不会有任何问题。

4

1 回答 1

0

我想我当时的理解是不正确的。dwarf2 中堆栈展开的工作方式是使用调用帧信息 (CFI)。这将使调试器创建先前帧之一的状态。该帧的位置表达式将使调试器知道参数的位置。

于 2011-04-07T10:06:23.793 回答