我正在尝试使用libdwarf计算正在运行的程序中局部变量的位置。我曾经能够通过执行DW_OP_fbreg来做到这一点,该DW_OP_fbreg最终将映射到该函数的框架基础寄存器。在较新的矮人标准中,帧基为DW_OP_call_frame_cfa。我似乎找不到任何可以告诉我如何执行DW_OP_call_frame_cfa并返回框架基本位置的信息。关于CFA表的引用很多,谁会恢复哪些寄存器,但我不知道如何获取该信息以及如何应用它。有人可以填补空白吗?
最佳答案
DW_OP_call_frame_cfa
意味着您必须使用调用框架信息来计算CFA;然后将其压入表达式堆栈。
有关此说明,请参见DWARF 4标准的第6.4节(“ call 帧信息”)。本质上,您现在必须阅读.debug_frame
部分并根据6.4中所述的规则对其进行解码。这相当于为另一种小字节码语言编写另一个解释器。并可能还会重用DWARF表达式解释器。
此操作码基本上是DWARF中的空间优化。编译器已经在发出调用帧信息,并且此操作码还使他们可以重用它来计算变量位置。
关于c++ - 我该怎么办DW_OP_call_frame_cfa,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33071545/