有没有推荐一个跨平台的库,可以读取DWAF格式的ELF文件调试信息?我想在Python程序中读取DWARF调试信息。
街头出现了新的人物 - pyelftools - 一个用纯 Python 编写的解析 ELF 和 DWARF 格式的库。赶快试试吧。
它的目标是实现功能的完备性,目前正在积极开发中,因此任何问题都应该能够被快速、热情地处理 :-)
filebytes
的一些帮助,它也可以处理 MachO(MacOS/iOS)可执行文件。可能也适用于 PE,但我还没有尝试过。 - Seva Alekseyev您可能对来自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
[...]
很遗憾,解析DWARF调试信息的选项非常有限。
据我所知,只有一个通用库可用于解析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中可用。
dwarfdump
。 - hochl