分析MIPS二进制文件:是否存在用于解析二进制数据的Python库?

时间:2020-03-05 18:48:16  来源:igfitidea点击:

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

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

我更希望有一个程序包,该程序包使我可以从Python代码中本机查找内容,而无需进行其他处理。我在python.org上找不到libdwarf,libelf或者libbfd,也没有在dwarfstd.org上提及python。

某个地方有合适的模块吗?

解决方案

回答

我什么都不知道,但是如果所有其他方法都失败了,则可以使用ctypes直接使用libdwarf,libelf或者libbfd。

回答

我们应该尝试构建。将二进制数据解析为python对象非常有用。

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

回答

我一直在使用Construct构建DWARF解析器。当前相当粗糙,并且解析很慢。但是我认为我至少应该让你知道。通过一些工作,它可能会满足需求。

我已经在Bitbucket上托管了Mercurial中的代码:

  • http://bitbucket.org/cmcqueen1975/pythondwarf/
  • http://bitbucket.org/cmcqueen1975/construct/(对Construct库的必要修改)

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

回答

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

回答

我们可能对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)