库读取ELF文件DWARF调试信息

Cra*_*een 21 python debugging elf dwarf

有关良好的跨平台库的任何建议,以读取DWARF格式的ELF文件调试信息?我想在Python程序中阅读DWARF调试信息.

Eli*_*sky 25

块上有一个新的孩子 - pyelftools - 一个用于解析ELF和DWARF格式的纯Python库.试试看.

它旨在完成功能,目前正在积极开发中,因此任何问题都应该快速而热情地处理:-)


Mar*_*wis 11

"ELF调试信息"的概念并不存在:ELF规范故意未指定.debug部分的内容.

常见的调试格式是STAB和DWARF.读取DWARF的库是libdwarf.

  • 我成功地将libdwarf移植到使用visual studio 2008在windows上编译. (3认同)
  • @Torleif 分享一下你的移植版本怎么样?那会有很大帮助! (2认同)

小智 7

您可能对pydevtools的DWARF库感兴趣:

>>> 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
[...]
Run Code Online (Sandbox Code Playgroud)


Fal*_*ina 5

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

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

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

objdump -W
readelf --debug-dump=[OPTIONS]
Run Code Online (Sandbox Code Playgroud)

我目前使用一个基于 readelf 构建的项目,它对 DWARF 调试信息的支持功能非常齐全。您可以简单地使用 Python 在 shell 中执行任一命令,然后根据需要解析信息。当然不如图书馆那么理想,但应该可以解决问题。

编辑:我在之前的评论中注意到您提到了 Windows。这两个程序(objdump 和 readelf)都是 GNU-binutils 的一部分,因此它们应该可用于 Cygwin 或 mingw。