比较可执行文件或目标文件

时间:2015-03-02 10:57:05

标签: linux compare elf strip

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

最好的问候

6 个答案:

答案 0 :(得分:3)

我会尝试使用

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

或者,正如F.Hauri建议的那样,

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

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

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

答案 1 :(得分:2)

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

您需要跳过调试部分并检查.text.data ...

之类的内容

答案 2 :(得分:1)

您可以使用diffoscope来比较两个.so文件,使用html选项在任何浏览器中查看差异,安装diffoscope后请尝试以下操作:

diffoscope --html输出first_file second_file

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:-2)

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

$ md5sum file.txt

对于许多文件,请执行:

$ md5sum *