【问题标题】:How to decode a debug_line section?如何解码 debug_line 部分?
【发布时间】:2014-02-23 03:00:28
【问题描述】:
我试图弄清楚 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 吗?
【问题讨论】:
标签:
debugging
gcc
elf
dwarf
【解决方案1】:
我知道,这是一个相当古老的问题,但可能有人会寻找一种方法来阅读 .debug_line 部分。
我发现readelf 能够解析它:
readelf --debug-dump=line <path/to/binary>
(或)
readelf --debug-dump=decodedline <path/to/binary>
首先向您展示了 Elf 二进制文件中出现的 .debug_line 内容的解释。其次,将所有数据组合到更结构化的视图中,关于在特定 .debug_line 单元中给出的不同记录之间的引用。
还有一个工具 dwarfdump(在 Ubuntu 存储库中可用),但我没有机会检查它。
【解决方案2】:
如果 DWARF 标准没有帮助,那么我真正建议的就是阅读一些实现 .debug_line 解析的源代码。也许这会更清楚;或者结合 DWARF 标准阅读它会有所帮助。这些信息有很多读者;一个相对简单的是在 GNU binutils 中;获取源代码并在“bfd/dwarf2.c”中查找 .debug_line 解码。
对于标准头文件,binutils 还包括一个 dwarf2.h。但你是对的——我认为没有标准的头文件,而是各种项目(binutils、elfutils、libdwarf,可能还有其他)制作自己的头文件,通常来自 DWARF 规范。