【问题标题】:Any experienced DWARF parsers/users? Need to get the attribute type offset of a DIE任何有经验的 DWARF 解析器/用户?需要获取一个DIE的属性类型偏移量
【发布时间】:2012-08-27 07:36:59
【问题描述】:

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

例子:


DW_AT_type

我想要的是该特定 DIE 的类型属性的 156 偏移值。

你们知道 API 是否提供了执行此操作的任何功能吗?

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

【问题讨论】:

  • 请给你的问题一个合适的标题......我们应该能够知道你的问题是关于什么的。

标签: c debugging elf dwarf


【解决方案1】:

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

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

由于 dwarf 中的引用被定义为从调试信息开始到您要查找的 DIE 的偏移量,请使用引用调用 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);

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

【讨论】:

  • 嗯,这似乎很有趣,我直到现在才检查这个问题。我所做的是创建另一个函数来递归地遍历整个 DIE,直到找到与我正在寻找的类型的 DIE 的偏移量匹配的函数。我认为基本上就是这样,您唯一没有考虑到的是必须在找到正确的 DIE 之前完成此操作。例如,有时第二个 DIE 的类型是 const 而不是 char..
  • 抱歉,回答迟了...我认为 const DIE 是您要查找的类型的一部分。我同意顶部符号的完整类型是 DIE 树。当然,如果你真正想要的只是 char、int 等,你需要解析类型树...
猜你喜欢
  • 2017-01-22
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2016-11-09
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多