我该怎么做DW_OP_call_frame_cfa

时间:2015-10-12 00:17:44

标签: c++ linux debugging dwarf

我试图使用libdwarf计算正在运行的程序中局部变量的位置。我曾经能够通过执行DW_OP_fbreg来做到这一点,DW_OP_fbreg最终会映射到该函数的帧基础的寄存器。在较新的矮人标准中,框架基础是DW_OP_call_frame_cfa。我似乎找不到任何告诉我如何执行DW_OP_call_frame_cfa并返回帧基位置的信息。有很多关于CFA表的参考资料以及谁恢复了哪些寄存器,但我不知道如何获取该信息以及如何应用它。有人可以填补空白吗?

1 个答案:

答案 0 :(得分:2)

DW_OP_call_frame_cfa表示您必须使用调用帧信息来计算CFA;然后在表达式堆栈上推送它。

有关此内容的解释,请参阅DWARF 4标准的第6.4节(“呼叫帧信息”)。基本上,您现在必须阅读.debug_frame部分并根据6.4中描述的规则对其进行解码。这等于为另一个小字节码语言编写另一个解释器;并且可能也重用DWARF表达式解释器。

此操作码基本上是DWARF中的空间优化。编译器已经发出了调用帧信息,这个操作码也允许它们重用它来计算变量位置。