11

我正在开发一个实用程序,该实用程序需要将十六进制地址解析为二进制文件中的符号函数名称和源代码行号。该实用程序将在 x86 上的 Linux 上运行,尽管它分析的二进制文件将用于基于 MIPS 的嵌入式系统。MIPS 二进制文件是 ELF 格式,使用 DWARF 作为符号调试信息。

我目前正计划 fork objdump,传入一个十六进制地址列表并解析输出以获取函数名称和源代码行号。我已经编译了一个支持 MIPS 二进制文件的 objdump,它正在工作。

我希望有一个包允许我从 Python 代码中本地查找内容,而无需分叉另一个进程。我在 python.org 上找不到任何提及 libdwarf、libelf 或 libbfd,在 dwarfstd.org 上也找不到任何提及 python。

某处是否有合适的模块可用?

4

6 回答 6

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)
于 2010-09-05T17:29:19.353 回答
5

请检查pyelftools - 一个新的纯 Python 库,旨在执行此操作。

于 2012-01-06T07:11:55.193 回答
4

你应该试试Construct 。将二进制数据解析为 python 对象非常有用。

甚至还有一个ELF32文件格式的示例。

于 2009-02-04T09:19:06.753 回答
3

我不知道,但如果一切都失败了,你可以使用ctypes直接使用 libdwarf、libelf 或 libbfd。

于 2008-09-05T15:23:13.250 回答
3

我一直在使用Construct开发一个 DWARF 解析器。目前相当粗糙,解析速度很慢。但我想我至少应该让你知道。它可能会满足您的需求,但需要做一些工作。

我有 Mercurial 中的代码,托管在 bitbucket:

Construct是一个非常有趣的库。DWARF 是一种复杂的格式(正如我所发现的那样),并将 Construct 推向了我认为的极限。

于 2009-08-30T00:48:04.057 回答
2

hachior是另一个用于解析二进制数据的库

于 2010-06-11T14:23:05.163 回答