代码之家  ›  专栏  ›  技术社区  ›  Craig McQueen Dr. Watson

用于读取ELF文件的库DWARF调试信息

  •  19
  • Craig McQueen Dr. Watson  · 技术社区  · 15 年前

    有没有建议使用一个好的跨平台库来读取DWARF格式的ELF文件调试信息?我想在python程序中读取侏儒调试信息。

    4 回复  |  直到 10 年前
        1
  •  21
  •   Eli Bendersky    11 年前

    街区里有个新来的孩子- pyelftools -用于解析ELF和DWARF格式的纯Python库。试一试。

    它的目标是功能完整,目前正在积极开发中,因此任何问题都应该迅速而热情地处理:—)

        2
  •  10
  •   newbie    10 年前

    “elf调试信息”的概念并不真正存在:elf规范故意不指定.debug节的内容。

    常见的调试格式是stab和 DWARF . 阅读矮人的图书馆是 libdwarf .

        3
  •  7
  •   emilmont    14 年前

    你可能对矮人图书馆感兴趣 pydevtools :

    >>> from devtools.dwarf import DWARF
    >>> dwarf = DWARF('test/test')
    >>> dwarf.get_loc_by_addr(0x8048475)
    ('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
    >>> print dwarf
    .debug_info
    COMPILE_UNIT<header overall offset = 0>
    <0><11> compile_unit
    producer: GNU C 4.4.3
    language: C89
    name: a/test.c
    comp_dir: /home/emilmont/Workspace/dbg/test
    low_pc: 0x080483e4
    high_pc: 0x08048410
    stmt_list: 0
    [...]
    
        4
  •  4
  •   Martin Atkins    11 年前

    不幸的是,阅读侏儒调试信息的选项非常有限。

    据我所知,只有一个用于解析DWARF调试信息的通用库,那就是 libdwarf . 不幸的是,没有人为libdwarf编写过python绑定(也许你可以自己动手,与其他人共享):你当然可以尝试使用 ctypes Python C API .

    然而,一个不那么优雅的解决方案是使用现有的DWARF解析器并解析它输出的文本信息。在Linux上,您可以选择

    objdump -W
    readelf --debug-dump=[OPTIONS]
    

    我目前使用的是一个基于readelf的项目,它对dwarf调试信息的支持非常全面。您可以简单地使用python在shell中执行任意一个命令,然后根据需要解析信息。当然没有图书馆那么理想,但应该做到这一点。

    编辑:我在之前的评论中注意到你提到了windows。这两个程序(objdump和readelf)都是gnu-binutils的一部分,因此它们应该可以与cygwin或mingw一起使用。