我不明白dwarf2中的堆栈展开如何确保在一些非常基本的ABI(应用程序二进制接口)场景中可靠地恢复参数。考虑ABI,它规定前三个参数必须在寄存器上,其余在堆栈上。据我所知,dwarf2堆栈展开机制确保了如果正确填充CFI表,就可以在当前帧的调用点获得寄存器的值。然而,这并不能让您进入caller的前言并知道参数寄存器的内容是什么。因此,我认为应该有一种方法来找到寄存器的值,即使是在同一帧中的不同点(在.debug_frame部分中编码的表只给出了前一帧中的位置)。
我的理解有什么问题吗?在这种情况下,基于dwarf2调试格式的调试器如何工作?对于在堆栈上传递参数的体系结构,在程序中恢复所有点的值(对于任何帧)都不会有任何问题。
发布于 2011-04-07 18:06:24
我想当时我的理解是不正确的。在dwarf2中,堆栈展开的工作方式是使用调用帧信息。这将让调试器创建其中一个先前帧的状态。该帧的位置表达式将使调试器知道参数的位置。
https://stackoverflow.com/questions/5229072
复制相似问题