如何创build二进制补丁?

什么是最好的方式去做一个二进制文件的补丁? 我希望用户能够简单地应用(一个简单的patch程序应该会很好)。 在文件上运行diff只是使Binary files [...] differ

如果使用其他标准patch以外的其他选项,则可能需要检查bsdiffbspatch

http://www.daemonology.net/bsdiff/

bsdiff和bspatch是构build和应用补丁到二进制文件的工具。 […]

Google Courgette工具看起来像是二进制diff修补程序最有效的工具

与bsdiff相比 – 小10倍的补丁!

bsdiff更新704,512

小胡瓜更新78,848

xdelta是另一种select。

 make patch: xdelta3.exe -e -s old_file new_file delta_file apply patch: xdelta3.exe -d -s old_file delta_file decoded_new_file 

它可以在Mac上通过自制软件: brew install xdelta

这似乎是更新的,但否则我不知道如何比较其他工具,如bsdiff。

现代端口:对于bsdiff / bspatch非常有用的.NET端口:

https://github.com/LogosBible/bsdiff.net

我个人的select。 我testing了它,它是唯一的链接,我可以开箱即可编译它(使用Visual Studio,例如2013)。 (其他地方的C ++源代码已经有些过时了,至less需要一点精简,只有32位设置了实际的内存(diff source size)限制,这是C ++代码bsdiff的一个端口,甚至可以testing补丁结果是否相同原始代码)。

进一步的想法:用.NET 4.5,你甚至可以摆脱#Zip lib,这是一个依赖关系。

我还没有测量它是否比c ++代码慢一点,但它对我来说很好,(bsdiff:在1分钟内为90 MB文件),对我来说时间关键只是bspatch,而不是bsdiff 。

我不太确定,如果使用了一台x64机器的整个内存,但是我假设它。 支持x64的版本(“任何CPU”)至less可以工作。 尝试了一个100 MB的文件。

– 另外:如果您的主要目标是可执行文件,引用的Google项目“Courgette”可能是最好的select。 但是,至less据我了解,这是为了构build它(对于Windows度量,至less),对于二进制文件,它也使用纯粹的bsdiff / bspatch。

假设你知道文件的结构,你可以使用ac / c ++程序逐字节地修改它:

http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx

只要阅读旧文件,并写出一个新的修改,如你所愿。

不要忘记在文件中包含一个文件格式的版本号,这样你就知道如何读取任何给定版本的文件格式。