我正在试图弄清楚DWARF 2 debug_line部分是如何编码的。标准论文(http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf)对我没什么帮助,我真的不明白以下内容:
.4byte .debug_line
.4byte 0x736e7502, 0x656e6769, 0x6e692064, 0x04070074
代表什么。那里有“unsigned int”字符串编码,但前面有0x02值..这代表什么?我甚至无法找到带有DWARF 2常量的标准枚举/定义标头..有人可以解释如何解析DWARF 2中的debug_line吗?
答案 0 :(得分:4)
我知道,这是一个非常古老的问题,但可能会有人在寻找阅读.debug_line部分的方法。
我发现readelf
能够解析它:
readelf --debug-dump=line <path/to/binary>
(或)
readelf --debug-dump=decodedline <path/to/binary>
首先显示您解释.debug_line内容,如Elf二进制文件中所示。其次,将所有数据组合成更结构化的视图,特别是给出了不同记录之间的引用.debug_line unit。
还有一个工具dwarfdump
(在Ubuntu repos中可用),但我没有机会检查它。
答案 1 :(得分:1)
如果DWARF标准没有帮助,那么我真正建议的是阅读一些实现.debug_line解析的源代码。也许这会更清楚;或者也许与DWARF标准一起阅读它会有所帮助。这些信息有很多读者;一个相对简单的是GNU binutils;抓住源代码并在&#34; bfd / dwarf2.c&#34;中寻找.debug_line解码。
对于标准头文件,binutils还包含一个dwarf2.h。但你是对的 - 我不认为有一个标准的标题,而是各种项目(binutils,elfutils,libdwarf,可能是其他项目)制作自己的标题,通常来自DWARF规范。