我正在开发一个实用程序,它需要将十六进制地址解析为二进制文件中的符号函数名和源代码行号。该实用程序将在x86上的Linux上运行,但它分析的二进制文件将用于基于MIPS的嵌入式系统。 MIPS二进制文件采用ELF格式,使用DWARF作为符号调试信息。
我目前正在计划派生objdump,传入十六进制地址列表并解析输出以获取函数名称和源行号。我已经编译了一个支持MIPS二进制文件的objdump,它正在工作。
我更喜欢有一个软件包,允许我从Python代码本地查找内容而不需要另外的进程。我在python.org上找不到libdwarf,libelf或libbfd,也没有在dwarfstd.org上提及过python。
某处有合适的模块吗?
答案 0 :(得分:8)
您可能对pydevtools中的DWARF库感兴趣:
>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
答案 1 :(得分:4)
答案 2 :(得分:4)
请检查pyelftools - 一个新的纯Python库,用于执行此操作。
答案 3 :(得分:3)
我不知道,但如果一切都失败了,你可以使用ctypes直接使用libdwarf,libelf或libbfd。
答案 4 :(得分:3)
我一直在使用Construct开发DWARF解析器。目前相当粗糙,解析速度很慢。但我想我至少应该让你知道。通过一些工作,它可能适合您的需求。
我在Mercurial中获得了代码,托管在bitbucket:
Construct是一个非常有趣的图书馆。 DWARF是一种复杂的格式(正如我所发现的那样),并且我认为将Construct推向极限。
答案 5 :(得分:2)
hachior是另一个用于解析二进制数据的库