Comment créer des patches binaires?

Quelle est la meilleure façon de faire un patch pour un fichier binaire? Je veux qu'il soit simple pour les utilisateurs d'appliquer(une application simple patch serait agréable). Exécuter diff sur le fichier donne juste Binary files [...] differ

46
demandé sur Mike 2009-12-22 12:03:39

5 réponses

si l'utilisation de quelque chose d'autre que la norme patch est une option pour vous, vous pourriez vouloir vérifier bsdiff et bspatch :

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

bsdiff et bspatch sont des outils pour construire et appliquer des correctifs aux fichiers binaires. [...]

40
répondu Heinzi 2009-12-22 09:09:07

L'outil de Courgette de Google ressemble à l'outil le plus efficace pour les patches de diff binaires

comparaison avec bsdiff - 10 fois plus petit patch!

bsdiff mise à jour 704,512

Courgette mise à jour 78,848

14
répondu Speakus 2017-05-23 11:55:09

xdelta est une autre option.

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

il est disponible sur mac via homebrew: brew install xdelta

Il semble être plus récent, mais sinon je n'ai aucune idée de comment il se compare à d'autres outils comme bsdiff.

9
répondu Jared Beck 2015-07-13 19:33:44

port moderne: port .NET très utile pour bsdiff/ bspatch:

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

mon choix personnel. Je l'ai testé, et c'était le seul de tous les liens, j'ai été capable de le compiler (avec Visual Studio, par exemple 2013). (La source C++ d'ailleurs est un peu dépassé et a besoin d'au moins un peu de polissage et n'est que de 32 bits qui définit la mémoire réelle (diff taille source). C'est un port de CE C++ code bsdiff et teste même si les résultats du correctif sont identiques au code original).

autre idée: avec .NET 4.5 vous pouvez même vous débarrasser de #Zip lib, qui est une dépendance ici.

Je n'ai pas mesuré s'il est légèrement plus lent que le code c++, mais il a fonctionné très bien pour moi, (bsdiff: fichier de 90 Mo en 1-2 min.), et le temps critique pour moi, c'est seulement la bspatch, pas la bsdiff.

Je ne suis pas vraiment sûr, si l'ensemble du souvenir d'un la machine x64 est utilisée, mais je le suppose. La construction capable de x64 ("N'importe quel CPU") fonctionne au moins. Essayé avec un 100 MO de fichiers.

- En outre: le projet Google Cité "Courgette" peut être le meilleur choix si votre cible principale sont des fichiers exécutables. Mais c'est un travail de construction (pour les mesures de Windows, au moins), et pour les fichiers binaires, il utilise aussi bsdiff/bspatch pur, autant que j'ai compris le doc.

6
répondu Philm 2015-11-17 19:39:57

en supposant que vous connaissez la structure du fichier, vous pouvez utiliser un programme C / C++ pour le modifier byte byte:

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

je Viens de lire dans l'ancien fichier, et d'écrire un nouveau modifié comme vous le souhaitez.

n'oubliez pas d'inclure un numéro de version de format de fichier dans le fichier pour que vous sachiez lire n'importe quelle version du format de fichier.

-1
répondu Jamie Clarke 2009-12-22 09:12:53