用于非常大的文件的二进制比较工具?
我需要一个实用程序来区分两个二进制文件。 文件很大(6-50 GB)。
注意:这里需要特别指出:绝大多数diff程序通过将文件映射到其虚拟地址空间来工作。 在32位Windows上,这将可比较的文件大小限制在1 GB以下。 (如果Windows使用/ 3GB开关运行,则为1.5 GB,并且程序已经宣称它为3 GB; / LARGEADDRESSAWARE)。 如果一个程序坚持把文件全部映射到它的地址空间的技术,那么它必须被重新编译为一个64位的应用程序,它具有8TB的地址空间(这符合我的要求)
Beyond Compare是我最喜欢的diff工具,我拥有它,但是它不能处理二进制文件,而不能处理进程地址空间中的内容。
HexDiff 3.0似乎很有趣,除了试用版本不做差异。
-
该工具应该是免费的,因为我不付钱来弄清楚它不起作用。
-
该工具应该是一个Windows应用程序。
-
该工具不应该是基于控制台的(即,Windows应用程序)
-
该工具应该是graphics化的(即Windows应用程序)
您正在寻找HxD最好的和免费的Hex-Editor for Windows,自2009年4月3日以来没有任何变化,因为它没有错误,只是完美的。
它的“文件比较(简单)”( Ctrl + K )可视化任何二进制文件。
- 无论文件大小即时打开(最多8EB)8 ExaByte是800万TeraByte。
((bsdiff是大量的精英:),除此之外)
我个人喜欢vbindiff (SUA模式)的小文件,我已经testing了这个工具块 (Windows WPF,免费客户端,networking订阅费用),它可以做非常快的子部分匹配大型内容search空间即将发布。
如果你是不同的(本地)可执行文件, PatchDiff2 (工具是免费的,IDA是$)是一个IDA插件,它可以让你超过90-95%的准确性,没有问题,即使是在优化或其他构build设置的差异。
BinNavi ,($)是另一个工具,做得很好。
如果你想鉴定二进制文件的相似性, STAN (在SUA模式下工作),可以迅速切断普通的BS,让你安然无恙。
为了完整起见,与bsdiff相关的是谷歌Chrome浏览器的新algorithm, Courgette似乎已经改进了bsdiff相当数量,它将很高兴看到它可以适应其他格式,它似乎很好地利用优化的符号表查找和似乎是(没有读取代码)的基础指针(即不使用线性地址,但只是使用尽可能兼容的符号中的偏移量)得到的改进。
Google曾经使用过bsdiff, http: //www.daemonology.net/bsdiff/
但是现在他们使用了Courgette http://dev.chromium.org/developers/design-documents/software-updates-courgette
传统的做法是使用“cmp –verbose”(相当于“cmp -l”)。 添加“–print-bytes”(或“-b”)标志,以可读格式呈现不同的字节(除了由“–verbose”标志提供的十进制值和字节数)。 由于你的文件太大了,你可能会想把输出放到一个文件中,这样你就可以看到它,并且还可以在闲暇时分析结果。 例如,我会比较两个相似的MP3文件:
$ cmp --verbose --print-bytes a.mp3 b.mp3 | tee differences 16315 302 MB 115 M 16316 233 M-^[ 144 d 16317 110 H 224 M-^T
。 。 。 。
21601545 377 M-^? 300 M-@ 21601546 203 M-^C 0 ^@ 21601547 300 M-@ 0 ^@
(当然要引用你的文件名, cmp理解“ – ”标志,如果你需要的话,你可以input“cmp -lb”而不是使用long参数。)使用wc来查看有多less字节不同:
$ wc --lines differences 66115 differences $ wc --bytes a.mp3 b.mp3 21602502 a.mp3 21602502 b.mp3 43205004 total
cmp只会逐字节比较文件(如果字节被插入或删除,它不能重新同步),但是这似乎正是你所需要的。 它可以处理任意大的文件(并且不需要比小文件更多的内存)。 它在Mac OS X,各种BSD和Unices以及GNU / Linux(即除Windows之外的每一个广泛使用的现代操作系统)上都被默认发现。 (如果这真的是一个约束,请考虑一个最小化的Cygwin安装或等价物。)
虽然这似乎是工作的正确工具,但它被您的两个标准排除在外:它是“基于控制台”,没有graphics组件。 我认为你的问题描述中一定有一些缺失。 你能解释为什么一个控制台会有问题,你需要什么额外的数据可视化?
你可以尝试xdelta 。 我从来没有找过一个GUI版本,但你可以试试这个 (尽pipe它只是KDE)。
我一直很高兴地使用WinMerge来显示二进制文件的差异。 它也是免费的开放源代码。
否则,你的文件是非常大的,可能不适合差异工具 – 你有没有考虑过生成一个二进制补丁(例如.ppf,Playstation补丁文件),只是看看?
我为ECMerge工作,如果您search差异化工具而不是“delta”,即理解差异比具有紧凑表示更重要,那么它就是您想要的。 对于文件大小几乎没有限制(大约在百亿字节处),只是为防止病态差异(例如数十亿个差异)而计算差异。
你最近的三个要求使这成为一个难题。 graphics化的Windows程序为您提供了一个基于文本的控制台程序不能做什么? 所以没有很多工具可以做你想做的事情。 所以我会忽略最后三个,把我的业力拿在手里,并build议rdiff。 它是基于文本和控制台的。 但它可以区分任意大小的二进制文件。 您可以通过Cygwin( http://cygwin.com )获得Windows的rdiff。
我跑到这寻找一个recursion的二进制文件比较工具比我已经使用的更好。
我知道一个可能适合你的要求。 它会失败的唯一方法是在文件大小,但它是值得一试。 这就是所谓的Windiff,并带有不同版本的Windows工具/扩展包/无论这些被称为。 我发现它工作得很好。
你可以试试vbindiff, http: //www.cjmweb.net/vbindiff/
这是一个控制台应用程序,但它做得非常好,所以我认为它的graphics – 你会得到一个分割的屏幕,显示两个文件并排在hex。
它被devise来处理大文件,我现在正在查看2个8GB的文件。
如果在Windows上编译,你可以试试hexdiff 。 这是基于控制台,但它有graphics输出,我看到两个5 GB文件之间的差异没有麻烦
由于这些文件非常庞大,而且您可能还有一些差异,所以差异将会太大,以至于无法适应标准Windows应用程序可以运行的任何内容。 所以我的做法是:
-
将文件转换为文本。 使用命令行hex转储器,或者更有用的,编写一个能理解二进制数据意味着什么的小程序,以便比较有意义的数据而不是比特浪费。
-
使用命令行diff工具(如cygwin中的工具)。 GNU命令行工具可以处理任意大的文件。
-
用
less
检查结果。 你可能会争辩说,你会想看到所有的差异,但是除非你是人类的外星人,否则你的大脑甚至无法在工作记忆中保存整个屏幕的内容。 所以如果你真的想要实现某些东西,那么你必须减less你所需要的数据量。
这是HxD http://mh-nexus.de/en/hxd/的另一个build议; – 我只是用它来区分两个3 GB的MXF文件来validation渲染帧的损坏发生在哪里。 这个操作花了大约10秒钟,而Araxis Merge(我的传统和非常受欢迎的diff工具)设法消耗机器上所有的内存,并且仍然不能用于这个操作。