【问题标题】:Analizing MIPS binaries: is there a Python library for parsing binary data?分析 MIPS 二进制文件:是否有用于解析二进制数据的 Python 库?
【发布时间】:2023-03-31 14:43:01
【问题描述】:

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

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

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

是否有合适的模块可用?

【问题讨论】:

    标签: python x86 mips elf dwarf


    【解决方案1】:

    您可能对来自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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 我正在寻找类似的东西并检查了 Construct。里面的东西挺不错的,就是项目好久没更新了。
        • 刚看了一下 Construct,它看起来真的很棒。印象深刻。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

          • 嗨 Craig,你有任何关于如何使用 DWARF 解析器的示例吗?我已经查看了您的 repo,但找不到任何内容。我怎么能做类似 emilmont 的 dwarf.get_loc_by_addr() 示例?
          • @NickToumpelis,我已经有一段时间没有做这方面的工作了,但我现在才回到它,因为它可能对我的工作有用。我对基于 Construct 的解决方案并不完全满意,因为解析速度很慢。因此,目前没有您要求的高级 API。它可以将 DWARF 信息解析成一棵树。下一个任务是在树中搜索您要查找的信息。 DWARF 格式非常有表现力,我不确定什么是访问数据的好简单 API。
          • Craig:pyelftools (bitbucket.org/eliben/pyelftools) 建立在 construct 之上,将其用于低级 API,但在顶部添加了功能齐全的高级 API
          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2014-11-12
            • 2010-09-30
            • 1970-01-01
            • 2011-11-23
            • 2015-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多