【问题标题】: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 规范。

      【讨论】:

        猜你喜欢
        • 2015-01-23
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多