簡體   English   中英

如何創建二進制補丁?

[英]How do I create binary patches?

為二進制文件制作補丁的最佳方法是什么? 我希望它對用戶來說很簡單(一個簡單的patch應用程序會很好)。 在文件上運行 diff 只會給Binary files [...] differ

查看bsdiffbspatch網站聯機幫助頁論文GitHub fork )。

要安裝此工具:

  • Windows:下載並解壓這個包 你還需要一份bzip2.exePATH的副本; 此處的“二進制文件”鏈接下載。
  • macOS:安裝 Homebrew 並使用它來安裝bsdiff
  • Linux:使用包管理器安裝bsdiff

谷歌 Chrome 團隊開發的Courgette看起來是最有效的二進制補丁可執行工具。

引用他們的數據:

以下是開發者頻道上最近 190.1 -> 190.4 更新的大小:

  • 完整更新: 10,385,920 字節
  • bsdiff 更新: 704,512 字節
  • 西葫蘆更新: 78,848 字節

以下是構建它的說明 這是Mehrdad提供的 2018 年的 Windows 二進制文件

xdelta(網站GitHub )是另一種選擇。 它似乎是最近的,但除此之外我不知道它與 bsdiff 等其他工具相比如何。

用法:

  • 創建補丁: xdelta -e -s old_file new_file delta_file
  • 應用補丁: xdelta -d -s old_file delta_file decoded_new_file

安裝:

  • Windows:下載官方二進制文件
  • Chocolatey: choco install xdelta3
  • 自制程序: brew install xdelta
  • Linux:在包管理器中以xdeltaxdelta3提供。

現代端口:對於 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 標簽

https://youtu.be/EpyuF4t5MWk

微軟 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM