2

所以我正在尝试使用 libdwarf 解析程序的 DWARF 文件(为此我必须坚持使用 C),我正在尝试从每个 DIE 中专门获取 DW_AT_type 标记。它们中的大多数(我不确定是否全部)都是偏移量,我试图找到任何有用的函数来获取这些标签的值。

例子:

<2><286>
DW_AT_type <156>

我在这里想要的是该特定 DIE 的 type 属性的 156 偏移值。

你们知道API是否提供了任何功能来做到这一点?

注意:我必须坚持使用 C,所以请不要推荐任何 python 库或解析 dwarfdumped 文件。我只是在寻找一个特定的功能,但最近几天一直在尝试,但在文档中找不到任何功能。

4

1 回答 1

6

如您所见, DW_AT_type 是对另一个 DIE 的引用。

libdwarf 提供了各种名为 dwarf_form* 的函数来将属性原始值转换为有意义的类型。在您的情况下,您正在寻找 dwarf_global_formref 函数。

由于 dwarf 中的引用被定义为从调试信息开始到您正在寻找的 DIE 的偏移量,因此使用 found 的引用调用 dwarf_offdie_b。

没有错误检查的示例代码:

// Dwarf_Debug dbg, Dwarf_Die die already initialized
Dwarf_Attribute attr;
Dwarf_Off offset;
Dwarf_Die typedie;
dwarf_attr(die,DW_AT_type,&attr,NULL);
dwarf_global_formref(attr,&offset,NULL);
dwarf_offdie_b(dbg,offset,1,&typedie,NULL);

请务必查看手册以了解每个参数的确切含义。

于 2012-09-05T01:57:16.407 回答