让我从尝试真实的方法开始,然后指出一些更近期的方法.
我见过的方法可以使用二进制文件
很久以前,人们将二进制文件的旧版本和新版本扩展为临时"文本"文件(每个字节扩展为3个字节:2个十六进制数字和一个换行符).然后通过旧版本的"diff"(绝对无法处理二进制文件)运行这两个"文本"文件来制作补丁文件.然后我们通过尚未8位清理的通信线路传输了"文本"补丁文件.在接收端,一个将旧的二进制文件扩展为临时文本版本,然后修补旧文本文件,然后将新文本文件压缩回二进制文件(将每对十六进制数字压缩成一个字节,然后扔掉新线和任何可能已经悄悄进入的回车).
最近,我一直在使用rsync(或者在它之上构建的一些实用程序,例如Unison).它处理任意二进制文件就好了.我通常会进行实时更新,Unison在我的本地计算机上运行,rsync在文件服务器上运行,互相交谈.
无论如何生成补丁文件,您都可以使用任何数据压缩实用程序来压缩该文件.
据我所知,应该使用二进制文件
StackOverflow:"如何为二进制差异输出文件创建PATCH文件" 建议使用bsdiff.
另一个StackOverflow问题暗示"vimdiff"似乎可以充分处理任意字节.
StackOverflow:"有用的二进制差异工具"提到了一些其他二进制差异工具.
我听说一些基于rsync的工具 - " rdiff "和"rdiff-backup"和"duplicity" - 允许你创建一个补丁文件.然后,接收该补丁文件的人可以使用它将旧的二进制文件更新为新的二进制文件.
在维基百科称,近期标准的"差异"和"补丁"公用事业的版本支持二进制文件.你试过吗?
可执行文件压缩的前沿研究
如果您对更新可执行文件时使delta文件尽可能小的前沿研究感兴趣,那么您需要查看 Stephen Chams项目中Stephen Adams 2009的"Courgette如何工作".
除此之外,接收补丁的计算机"反汇编"旧应用程序,将所有绝对地址和偏移转换为符号; 然后修补反汇编的代码; 然后将修补后的代码"重新组装"到新版本的应用程序中.
| 归档时间: |
|
| 查看次数: |
7097 次 |
| 最近记录: |