[英]How do I create binary patches?
為二進制文件制作補丁的最佳方法是什么? 我希望它對用戶來說很簡單(一個簡單的patch
應用程序會很好)。 在文件上運行 diff 只會給Binary files [...] differ
谷歌 Chrome 團隊開發的Courgette看起來是最有效的二進制補丁可執行工具。
引用他們的數據:
以下是開發者頻道上最近 190.1 -> 190.4 更新的大小:
- 完整更新: 10,385,920 字節
- bsdiff 更新: 704,512 字節
- 西葫蘆更新: 78,848 字節
以下是構建它的說明。 這是Mehrdad提供的 2018 年的 Windows 二進制文件。
現代端口:對於 bsdiff/bspatch 非常有用的 .NET 端口:
https://github.com/LogosBible/bsdiff.net
我個人的選擇。 我測試了它,它是所有鏈接中唯一的一個,我能夠開箱即用地編譯它(使用 Visual Studio,例如 2013)。 (其他地方的 C++ 源代碼有點過時,至少需要一點改進,並且只有 32 位,它設置了實際內存(差異源代碼大小)限制。這是這個 C++ 代碼 bsdiff 的一個端口,甚至測試補丁結果是否相同到原始代碼)。
進一步的想法:使用 .NET 4.5,您甚至可以擺脫這里的依賴項 #Zip lib。
我沒有測量它是否比 C++ 代碼稍微慢一點,但它對我來說很好用,(bsdiff:1-2 分鍾內 90 MB 文件),對我來說時間關鍵的只是 bspatch,而不是 bsdiff .
我不確定是否使用了 x64 機器的整個內存,但我假設它。 支持 x64 的構建(“任何 CPU”)至少可以工作。 嘗試使用 100 MB 文件。
- 此外:如果您的主要目標是可執行文件,則引用的 Google 項目“Courgette”可能是最佳選擇。 但是構建它是可行的(至少對於 Windows 措施),並且對於二進制文件,它也使用純 bsdiff/bspatch,據我了解文檔。
對於小的、簡單的補丁,最簡單的方法是告訴 diff 使用 -a(或 --text)選項將文件視為文本。 據我了解,更復雜的二進制差異僅對減少補丁大小有用。
$ 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
$
如果文件大小相同,補丁只是修改了幾個字節,則可以使用 xxd,通常是隨操作系統一起安裝的。 下面將每個文件轉換為每行一個字節的十六進制表示,然后比較文件以創建一個緊湊的補丁,然后應用補丁。
$ 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
$
HDiffPatch: https : //github.com/sisong/HDiffPatch
可以運行在:windows、macos、linux、android
支持二進制文件或目錄之間的差異;
創建補丁: hdiffz [-m|-s-64] [-c-lzma2] old_path new_path out_delta_file
應用補丁: hpatchz old_path delta_file out_new_path
安裝:
從上一個版本下載,或下載下載源代碼 & make;
Jojos 二進制差異: https ://sourceforge.net/projects/jojodiff/
另一個很好的二進制差異算法;
diff 和 git-diff 可以通過將二進制文件視為帶有-a
文本來處理二進制文件。
使用git-diff
您還可以使用--binary
生成二進制文件的 ASCII 編碼,例如適合粘貼到電子郵件中。
https://github.com/reproteq/DiffPatchWpf DiffPatchWpf 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 標簽
微軟 Visual Studio 社區 2019
版本 16.7.7
.NETFramework,版本=v4.7.2
在 Windows 10x64bits 中測試
假設您知道文件的結構,您可以使用 ac / c++ 程序逐字節修改它:
http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx
只需讀入舊文件,然后根據需要寫出一個修改過的新文件。
不要忘記在文件中包含文件格式版本號,以便您知道如何讀取文件格式的任何給定版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.