Binary 如何创建二进制修补程序?
为二进制文件制作补丁的最佳方法是什么?我希望它对用户来说是简单的应用程序(一个简单的Binary 如何创建二进制修补程序?,binary,patch,Binary,Patch,为二进制文件制作补丁的最佳方法是什么?我希望它对用户来说是简单的应用程序(一个简单的patch应用程序就好了)。在文件上运行diff只会使二进制文件[…]不同签出bsdiff和bspatch(,) 要安装此工具,请执行以下操作: Windows:下载并解压缩。您还需要PATH中的bzip2.exe副本;从“二进制文件”链接下载 macOS:安装自制软件并使用它安装bsdiff Linux:使用软件包管理器安装bsdiff 假设你知道文件的结构,你可以使用C/C++程序逐字节修改: 只需读入旧
patch
应用程序就好了)。在文件上运行diff只会使二进制文件[…]不同
签出bsdiff
和bspatch
(,)
要安装此工具,请执行以下操作:
- Windows:下载并解压缩。您还需要
中的PATH
副本;从“二进制文件”链接下载bzip2.exe
- macOS:安装自制软件并使用它安装
bsdiff
- Linux:使用软件包管理器安装
bsdiff
- 完全更新:10385920字节
- bsdiff更新:704512字节
- 小胡瓜更新:78848字节
- 创建修补程序:
xdelta-e-s旧文件新文件增量文件
- 应用修补程序:
xdelta-d-s旧\u文件delta\u文件已解码\u新文件
- Windows:下载
- 巧克力:
choco安装xdelta3
- 自制:
brew安装xdelta
- Linux:在包管理器中以
或xdelta
的形式提供xdelta3
假设你知道文件的结构,你可以使用C/C++程序逐字节修改: 只需读入旧文件,然后写出一个新文件,根据需要修改即可 不要忘了在文件中包含文件格式版本号,这样你就知道如何读取任何给定版本的文件格式。,由Google Chrome团队开发,看起来是二进制修补可执行文件最有效的工具 引用他们的数据: 以下是开发者频道上最近190.1->190.4更新的大小:
给你。这是从2018年起提供的。现代端口:对于bsdiff/bspatch非常有用的.NET端口: 我个人的选择。 我对它进行了测试,它是所有链接中唯一的一个,我能够开箱即用地编译它(使用Visual Studio,例如2013)。(其他地方的C++源有点过时,需要至少一点抛光,只有32位,它设置了真正的内存(差异源大小)限制。这是C++代码BSDIFF的端口,甚至测试补丁结果与原始代码相同。) 进一步的想法:使用.NET4.5,您甚至可以去掉#Zip lib,这是一个依赖项
我没有测量它是否比C++代码稍微慢一些,但是它对我来说很好,(BSDIFF:90 MB文件在1-2分钟),对我来说关键的时间只是BSPATCH,而不是BSDIF.< 我不确定是否使用了x64机器的全部内存,但我假设是这样。支持x64的构建(“任何CPU”)至少可以工作。尝试使用100 MB的文件
- 此外:如果您的主要目标是可执行文件,那么引用的谷歌项目“小胡瓜”可能是最佳选择。但就我对文档的理解而言,构建它(至少对于Windows measures),对于二进制文件,它也使用纯bsdiff/bspatch。xdelta(,)是另一种选择。它似乎是最近的,但我不知道它与其他工具(如bsdiff)相比如何 用法:$ man diff | grep -B1 "as text"
-a, --text
treat all files as text
$ diff old new
Binary files old and new differ
$ diff -a old new > old.patch
$ patch < old.patch old
patching file old
$ diff old new
$
hdifffatch:可以在windows、macos、linux、android上运行
支持二进制文件或目录之间的差异
创建修补程序:
hdiffz[-m |-s-64][-c-lzma2]旧路径新路径输出增量文件
应用修补程序:
hpatchz旧路径增量文件输出新路径
安装:,或下载源代码&make Jojos二进制差异:
另一个好的二进制diff算法 diff和git-diff可以通过使用
-a
将二进制文件视为文本来处理它们
使用git diff
还可以使用--binary
生成二进制文件的ASCII编码,例如适合粘贴到电子邮件中。
扩散修补wpf
DiffPatchWpf简单的二进制补丁制作工具
比较两个二进制文件,并将它们之间的差异保存在新文件patch.txt中
在另一个二进制文件中快速轻松地应用补丁
现在,您可以在另一个二进制文件中快速轻松地应用这些差异
例如:
1-加载文件Aori.bin
2-加载文件Amod.bin
3-比较并保存Aori-patch.txt
4-加载文件Bori.bin
5-加载补丁Aori-patch.txt
6-应用修补程序并保存文件Bori-patched.bin
alt标签
Microsoft Visual Studio社区2019
版本16.7.7
.NETFramework,版本=v4.7.2
在Windows10x64bits中测试,该文档说,“我们编写了一个新的diff算法,它更了解我们正在推送的数据类型——包含已编译可执行文件的大型文件”。这意味着它对其他二进制文件不起作用(或者根本不起作用)。谢谢你的链接。但在Windows下编译它是一个真实的故事。它首先安装一个完整的开发人员系统,例如Git、Python等。也许它可以工作,但在我的机器上,fetch使用了一些安全且失败的端口。有人知道二进制下载链接吗?@jamescourgette是bsdiff的真正继承者。来自文档:小胡瓜
diff=bsdiff(concat(原件,猜测),更新)
。用一个合理的bdiff
算法,你就有了len(bdiff(concat(original,guess),update))
和一个小的(常量)C
。将C
设置为10是一个安全的赌注。也许有人可以为bsdiff
计算C
。注意,如果给定的bdiff
算法保证len(bdiff(concat(原始,随机),update),则C==1
$ xxd -c1 old > old.hex
$ xxd -c1 new > new.hex
$ diff old.hex new.hex | grep "^+" | grep -v "^++" | sed "s/^+//" > old.hexpatch
$ xxd -c1 -r old.hexpatch old
$ diff old new
$