【发布时间】:2015-05-02 16:52:09
【问题描述】:
我有两个文件应该从相同的源版本生成。其中一个文件被剥离。 是否可以比较文件的原始可执行部分以确定它们是否相同? 也可以在目标文件上完成(尤其是在 .ko linux 内核模块上)?
【问题讨论】:
我有两个文件应该从相同的源版本生成。其中一个文件被剥离。 是否可以比较文件的原始可执行部分以确定它们是否相同? 也可以在目标文件上完成(尤其是在 .ko linux 内核模块上)?
【问题讨论】:
您可以运行objdump -x <file> 列出程序的各个部分,然后运行objcopy -j <section> <file> <out> 提取这些部分并进行比较。
您需要跳过调试部分并检查.text、.data...等类似内容。
【讨论】:
我会尝试使用
objdump -d file1>a
objdump -d file2>b
diff a b
或者,正如 F.Hauri 所建议的,
diff <(objdump -d file1) <(objdump -d file2)
-d 选项反汇编文件的可执行部分。
但是,不同的编译器总是有可能生成不同的字节,从而生成不同的汇编代码。 另外,如果有多个,我不确定可执行文件中目标文件的顺序。 对于使用应该工作的相同编译器编译的目标文件。
【讨论】:
diff <(objdump -d file1) <(objdump -d file2),而不必使用临时文件! ;-)
diff -y ... | less -S 试试
检查两个文件是否相同的简单方法是 md5。您可以通过以下方式检查文件的 md5sum:
$ md5sum file.txt
对于许多文件,请执行以下操作:
$ md5sum *
【讨论】:
cmp,而不是md5sum。
你可以使用 diffoscope 比较两个 .so 文件,使用 html 选项在任何浏览器中查看差异,安装 diffoscope 后试试这个:
diffoscope --html 输出 first_file second_file
将在当前目录中创建一个 outfile.html 文件,您可以逐节查看其中的差异。
【讨论】:
elfcmp 比较 ELF 文件的内部结构,如文件头、节、段等。然后您可以将其打印在屏幕上或在您的应用程序中使用。它需要安装 python。
【讨论】:
elf_diff 比较 ELF 文件(目标文件、共享库、档案......)并生成 html 或 pdf 报告的差异。它的重点在于探索装配级别的变化和资源消耗。 相似性检测引擎在符号名称和汇编代码之间执行模糊匹配,并从比较的二进制文件中显示可能相关的符号对,例如因为改名了。 elf_diff 有助于理解更改高级语言代码(例如 C 或 C++)对程序存储和静态 RAM 使用的影响。 该工具最初面向嵌入式开发,但在其他环境中也可能有用。
尚未尝试使用内核模块文件使用 elf_diff,但由于这些也是 ELF 文件,我希望它可以工作。
【讨论】: