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

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

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

您可以使用工具bsdiff ,它是bspatch的伴侣,用于执行二进制文件的有效比较和补丁。

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

还有xdelta工具,比bsdiff长。 据bsdiff的作者说,效率相当低。 补丁出来更大。 它具有支持标准的VCDIFF格式( RFC 3284 )的优点,它也由其他几个工具支持,因此如果您需要使用其他工具,则会更有用。

差异会告诉你,如果二进制文件是不同的:

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. 

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

你可以使用diff :

 diff old_file new_file 

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