1

我试图弄清楚 DWARF 2 debug_line 部分是如何编码的。标准论文(http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf)对我没有多大帮助,我真的不明白以下内容如何:

    .4byte  .debug_line
    .4byte  0x736e7502, 0x656e6769, 0x6e692064, 0x04070074

代表某事。那里编码了“无符号整数”字符串,但它之前的 0x02 值..那代表什么?我什至找不到带有 DWARF 2 常量的标准 enum/define 标头。有人可以阐明如何解析 DWARF 2 中的 debug_line 吗?

4

2 回答 2

10

我知道,这是一个非常古老的问题,但可能有人会寻找一种阅读 .debug_line 部分的方法。我发现readelf能够解析它:

readelf --debug-dump=line <path/to/binary>

(或者)

readelf --debug-dump=decodedline <path/to/binary>

首先显示您解释的 .debug_line 内容,如 Elf 二进制文件中所示。第二个将所有数据组合到更结构化的视图中,关于在特定 .debug_line 单元中给出的不同记录之间的引用。

还有一个工具dwarfdump(在 Ubuntu 存储库中可用),但我没有机会检查它。

于 2016-04-25T12:17:30.367 回答
1

如果 DWARF 标准没有帮助,那么我真正建议的就是阅读一些实现 .debug_line 解析的源代码。也许这会更清楚;或者也许结合 DWARF 标准阅读它会有所帮助。这些信息有很多读者;一个相对简单的是在 GNU binutils 中;获取源代码并在“bfd/dwarf2.c”中查找 .debug_line 解码。

至于标准头文件,binutils 还包括一个 dwarf2.h。但你是对的——我认为没有标准的头文件,而是各种项目(binutils、elfutils、libdwarf,可能还有其他)制作自己的头文件,通常来自 DWARF 规范。

于 2014-02-01T04:05:36.230 回答