3个二进制文件的差异比较

9
我有三个二进制文件,我们称它们为 file1.binfile2.binfile3.bin
  • file1.binfile2.bin 有一些相同的部分。
  • file2.binfile3.bin 有一些相同的部分。
我想找到在 file1.binfile2.bin 中相同但在 file2.binfile3.bin 中不同的部分。
您建议如何做到这一点? 我已经使用xxd将二进制文件转储为文本文件,然后使用vim -d file1.txt file2.txt file3.txt进行了三路差异比较。
然而,vim会标记所有文件中发生更改的部分,即使它只在一个文件中更改,在其他两个文件中保持不变。 我希望这种特殊的情况能够被以不同的方式标记。
3个回答

6
也许您可以使用内置的unix diff(我认为它是OSX的一部分),但使用--unchanged-group-format列出相似之处。对于file1和file2执行此操作。然后对file2和file3执行此操作。您随后可以对两个结果文件进行常规diff比较。
要了解如何获取相似之处,请参见此帖子

0
我所使用的工具(ECMerge)可以做到这一点。你只需要对比这3个二进制文件,它会将相等的部分呈现在彼此前面,并将修改的字节适当地放置在它们之间。无需先获取十六进制转储。你可以使用JavaScript脚本根据差异结果和文件中的字节输出任何你想要的内容(它也可以在命令行中运行)。

-1

Chromium使用bsdiff,然后转而使用Courgette进行二进制差分,如他们的博客here中所解释的那样。您可能会从他们的博客中找到有用的线索。


它能够按照我在问题中描述的那样进行三方差异比较吗?我找不到如何实现,你能否详细说明一下? - dimme
bsdiff 适用于二进制文件,并生成二进制补丁。vimdiff 期望其输入为文本文件,因此我无法想到一种使 bsdiff 在此处按您所需的方式工作的方法。作为替代方案,请查看是否可以利用“'diffexpr'”选项来诱导 vim 在为二进制文件生成块时使用额外的设置 - 可以使用“-I”选项来指定应在进行差异比较时忽略的“行”的正则表达式。 - holygeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接