作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 libdwarf 计算正在运行的程序中局部变量的位置。我曾经能够通过执行 DW_OP_fbreg 来做到这一点,它最终会映射到一个寄存器,该寄存器将成为该功能的框架基础。在较新的矮人标准中,框架基础是 DW_OP_call_frame_cfa。我似乎无法找到任何信息来告诉我如何执行 DW_OP_call_frame_cfa 并返回框架基准位置。有很多对 CFA 表的引用以及谁恢复了哪些寄存器,但我不知道如何获取该信息以及如何应用它。有人可以填补空白吗?
最佳答案
DW_OP_call_frame_cfa
表示您必须使用调用帧信息来计算 CFA;然后将其压入表达式堆栈。
请参阅 DWARF 4 标准的第 6.4 节(“调用帧信息”)以获取对此的解释。本质上,您现在必须阅读 .debug_frame
部分并根据 6.4 中描述的规则对其进行解码。这相当于为另一种小型字节码语言编写另一个解释器;并可能重用 DWARF 表达式解释器。
这个操作码基本上是 DWARF 中的空间优化。编译器已经发出调用帧信息,这个操作码也让他们可以重用它来计算变量位置。
关于c++ - 我用 DW_OP_call_frame_cfa 做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33071545/
我正在尝试使用 libdwarf 计算正在运行的程序中局部变量的位置。我曾经能够通过执行 DW_OP_fbreg 来做到这一点,它最终会映射到一个寄存器,该寄存器将成为该功能的框架基础。在较新的矮人标
我是一名优秀的程序员,十分优秀!