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

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

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

某处有合适的模块吗?

有帮助吗?

解决方案

请检查 派尔夫工具 - 一个新的纯Python库旨在做到这一点。

其他提示

您可能对 DWARF 库感兴趣 pydev工具:

>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)

你应该给 构造 尝试一下。将二进制数据解析为Python对象非常有用。

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

我不知道,但如果其他方法都失败了,你可以使用 c类型 直接使用 libdwarf、libelf 或 libbfd。

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

我在 Mercurial 中获得了代码,托管在 bitbucket 上:

构造 是一个非常有趣的图书馆。DWARF 是一种复杂的格式(正如我所发现的),并且我认为将 Construct 推向了极限。

哈奇奥尔 是另一个用于解析二进制数据的库

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top