3个二进制文件的差异

时间:2011-12-30 10:20:24

标签: macos vim diff binaryfiles

我有3个二进制文件。我们称他们为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 个答案:

答案 0 :(得分:6)

也许您可以使用内置的unix diff(我认为它是OSX的一部分),但使用--unchanged-group-format列出相似之处。为file1和file 2执行此操作。然后对file2和file3执行此操作。然后,您可以对两个结果文件执行常规差异。

有关如何获得相似性的想法,请查看this post

答案 1 :(得分:0)

我工作的工具(ECMerge)就是这样做的。你只需要区分3个二进制文件,它将在彼此前面呈现相等的部分,并在两者之间适当放置修改后的字节。无需先获得十六进制转储。您可以在JavaScript中编写脚本,根据diff结果和文件中的字节输出您喜欢的任何内容(它也可以在命令行中使用)。

答案 2 :(得分:-1)

Chromium使用bsdiff,然后切换到courgette进行二元差异,如博客here中所述。您可以从他们的博客中找到有用的线索。