C 有经验丰富的侏儒解析器/用户吗?需要获取模具的属性类型偏移

C 有经验丰富的侏儒解析器/用户吗?需要获取模具的属性类型偏移,c,debugging,elf,dwarf,C,Debugging,Elf,Dwarf,因此,我试图使用libdwarf解析程序的DWARF文件(为此我必须使用C),我试图从每个DIE中获得DW_AT_类型标记。其中大部分(我不确定是否全部)都是偏移量,我试图找到任何有用的函数来获取这些标记的值 例如: DW_AT_类型 这里我想要的是特定模具的type属性的156 offset值 你们知道API提供了什么函数来实现这一点吗 注意:我必须坚持使用C,所以请不要推荐任何python库或解析矮化转储文件。我只是在寻找一个特定的函数,但在过去的几天里一直在尝试,在文档中找不到任何函数。

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

例如:

<286>
DW_AT_类型

这里我想要的是特定模具的type属性的156 offset值

你们知道API提供了什么函数来实现这一点吗


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

正如您所理解的,DW_AT_type是对另一个DIE的引用

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

由于dwarf中的引用定义为从调试信息的开始到要查找的管芯的偏移量,因此使用该引用调用dwarf\u 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);

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

请为您的问题指定适当的标题。。。我们应该能够知道你的问题是关于什么的。嗯,这看起来很有趣,我直到现在才检查这个问题。我所做的是创建另一个函数,递归地遍历整个模具,直到找到一个匹配我正在查找的模具类型的偏移量的函数。我认为基本上就是这样,你唯一没有考虑的是,在找到正确的模具之前,必须这样做。有时第二个骰子的类型是const而不是char,例如..很抱歉回答得太晚了。。。我认为constdie是你想要找到的类型的一部分。我同意顶部符号的完整类型是模具树。当然,如果您真正想要的只是char、int等,那么您需要解析类型树。。。