有经验的DWARF解析器/用户吗?需要获取DIE的属性类型偏移量

att*_*tis 2 c debugging elf dwarf

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

例:

<2> <286>
DW_AT_type <156>

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

你们知道API是否提供执行此功能的功能吗?

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

swa*_*ann 5

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

libdwarf提供了各种名为dwarf_form *的函数,用于将属性原始值转换为有意义的类型。就您而言,您正在寻找dwarf_global_formref函数。

由于dwarf中的引用定义为从调试信息开始到您要查找的DIE的偏移量,因此请使用find的引用调用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);
Run Code Online (Sandbox Code Playgroud)

确保检查手册中每个参数的确切含义。