如何计算linux中两个二进制文件(即两个可执行文件)之间的差异

时间:2012-11-16 10:55:05

标签: c linux unix embedded-linux

在Linux中有没有办法计算两个二进制文件之间的差异(即两个可执行文件)?

让我更具体一点:我想知道如何计算Linux中两个版本的可执行文件或应用程序或软件之间的增量(delta差异)。例如,如果我必须仅下载并安装现有应用程序或二进制文件的更新部分(最新版本和旧版本之间的差异),我该如何在Linux中执行此操作。

4 个答案:

答案 0 :(得分:9)

您可以使用工具bsdiff和它的随附bspatch来执行二进制文件的高效差异和补丁。

如果您想获得更小的补丁,可以查看Google Chrome中的Courgette。它建立在bsdiff之上,但它们通过在进行差异之前实际拆解它们来提供更高效的可执行文件差异。它不是作为单独的项目分发的,但您可以从Chromium source repository(如何check out the code)获取它。

还有xdelta工具,比bsdiff更长。根据bsdiff的作者,效率相当低;补丁更大。它的优点是它支持标准VCDIFF格式(RFC 3284),这也是其他几个工具所支持的,所以如果你需要使用其他工具,它会更有用。

答案 1 :(得分:2)

diff会告诉您二进制文件是否不同:

diff bin1 bin2
Binary files bin1 and bin2 differ

如果您想要区别对象,请使用cmp

cmp -l bin1 bin2 
  25  20 320
  26   4   3
  41 270 160
 209   4 264
 210   7   6

-l选项打印字节数和差异:

-l  --verbose
      Output byte numbers and values of all differing bytes.

答案 2 :(得分:0)

尝试cksum - 表明它们是相同的

答案 3 :(得分:-1)

您可以使用diff

diff old_file new_file

您也可以使用md5,但必须比较结果。如果md5校验和可用,它也可以用于检查下载文件的总和。