堆栈在dwarf2中展开

时间:2011-03-08 06:20:41

标签: debugging stack-unwinding dwarf

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

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

1 个答案:

答案 0 :(得分:0)

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