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

ind*_*nil 5 c unix linux embedded-linux

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

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

Bri*_*ell 9

您可以使用工具bsdiff和它的伴随bspatch来执行有效的差异和二进制文件的修补程序.

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

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


iab*_*der 3

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

diff bin1 bin2
Binary files bin1 and bin2 differ
Run Code Online (Sandbox Code Playgroud)

如果您想要差异,请使用cmp

cmp -l bin1 bin2 
  25  20 320
  26   4   3
  41 270 160
 209   4 264
 210   7   6
Run Code Online (Sandbox Code Playgroud)

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

-l  --verbose
      Output byte numbers and values of all differing bytes.
Run Code Online (Sandbox Code Playgroud)