Debugging 堆料展开

Debugging 堆料展开,debugging,stack-unwinding,dwarf,Debugging,Stack Unwinding,Dwarf,我不明白dwarf2中的堆栈展开如何确保在一些非常基本的ABI(应用程序二进制接口)场景中可靠地恢复参数。考虑一个ABI,它表示前三个参数必须在寄存器上并在堆栈上休息。据我所知,dwarf2堆栈展开机制确保如果正确填充CFI表,就可以在当前帧的调用点获得寄存器的值。然而,这不允许您进入调用者的开场白并知道参数寄存器的内容。因此,我认为应该有一种方法可以找到寄存器的值,即使在同一帧的不同点上(在.debug_frame部分中编码的表只给出了前一帧中的位置) 我的理解有什么错误吗?在这种情况下,基于

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


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

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