【问题标题】:compare executable or object file比较可执行文件或目标文件
【发布时间】:2015-05-02 16:52:09
【问题描述】:

我有两个文件应该从相同的源版本生成。其中一个文件被剥离。 是否可以比较文件的原始可执行部分以确定它们是否相同? 也可以在目标文件上完成(尤其是在 .ko linux 内核模块上)?

【问题讨论】:

    标签: linux compare elf strip


    【解决方案1】:

    您可以运行objdump -x <file> 列出程序的各个部分,然后运行objcopy -j <section> <file> <out> 提取这些部分并进行比较。

    您需要跳过调试部分并检查.text.data...等类似内容。

    【讨论】:

      【解决方案2】:

      我会尝试使用

      objdump -d file1>a
      objdump -d file2>b
      diff a b
      

      或者,正如 F.Hauri 所建议的,

      diff <(objdump -d file1) <(objdump -d file2)
      

      -d 选项反汇编文件的可执行部分。

      但是,不同的编译器总是有可能生成不同的字节,从而生成不同的汇编代码。 另外,如果有多个,我不确定可执行文件中目标文件的顺序。 对于使用应该工作的相同编译器编译的目标文件。

      【讨论】:

      • 使用bash,你可以写:diff &lt;(objdump -d file1) &lt;(objdump -d file2),而不必使用临时文件! ;-)
      • 在宽控制台中使用diff -y ... | less -S 试试
      • 我不得不说,在极少数情况下(不幸的是,我在这种情况下),如果两个版本的源代码只有数据(放入 .data、.rodata 等部分的那些字节)差异,反汇编后的代码是一样的,导致这种方法的比较结果为假阴性。总之,一般情况下,这种方法值得一试。
      【解决方案3】:

      检查两个文件是否相同的简单方法是 md5。您可以通过以下方式检查文件的 md5sum:

      $ md5sum file.txt
      

      对于许多文件,请执行以下操作:

      $ md5sum *

      【讨论】:

      • 问题是关于比较两个 ELF 文件的可执行部分,而不是比较整个文件。即使那样,答案也会是cmp,而不是md5sum
      【解决方案4】:

      你可以使用 diffoscope 比较两个 .so 文件,使用 html 选项在任何浏览器中查看差异,安装 diffoscope 后试试这个:

      diffoscope --html 输出 first_file second_file

      将在当前目录中创建一个 outfile.html 文件,您可以逐节查看其中的差异。

      【讨论】:

        【解决方案5】:

        elfcmp 比较 ELF 文件的内部结构,如文件头、节、段等。然后您可以将其打印在屏幕上或在您的应用程序中使用。它需要安装 python。

        【讨论】:

          【解决方案6】:

          elf_diff 比较 ELF 文件(目标文件、共享库、档案......)并生成 html 或 pdf 报告的差异。它的重点在于探索装配级别的变化和资源消耗。 相似性检测引擎在符号名称和汇编代码之间执行模糊匹配,并从比较的二进制文件中显示可能相关的符号对,例如因为改名了。 elf_diff 有助于理解更改高级语言代码(例如 C 或 C++)对程序存储和静态 RAM 使用的影响。 该工具最初面向嵌入式开发,但在其他环境中也可能有用。

          尚未尝试使用内核模块文件使用 elf_diff,但由于这些也是 ELF 文件,我希望它可以工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-16
            • 2010-10-22
            • 2011-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-23
            • 1970-01-01
            相关资源
            最近更新 更多