6

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

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

4

4 回答 4

10

您可以使用工具bsdiff和它的配套 bspatch 来进行有效的二进制文件差异和补丁。

如果你想获得更小的补丁,你可以看看谷歌浏览器中的Courgette。它建立在 bsdiff 之上,但它们通过在执行 diff 之前实际反汇编它们来提供更有效的可执行文件 diff。它不是作为一个单独的项目分发的,但是您可以从Chromium 源代码库中获取它(如何签出代码)。

还有xdelta工具,它的使用时间比 bsdiff 长。根据 bsdiff 的作者的说法,它的效率要低得多;补丁出来更大。它的优点是它支持标准的 VCDIFF 格式 ( RFC 3284 ),其他几个工具也支持该格式,因此如果您需要使用此类其他工具,它会更有用。

于 2012-11-16T11:04:14.413 回答
3

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.
于 2012-11-16T10:59:19.357 回答
0

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

于 2012-11-16T11:01:22.983 回答
-1

您可以使用diff

diff old_file new_file

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

于 2012-11-16T11:05:09.700 回答