Quelle est la meilleure façon de créer un correctif pour un fichier binaire? Je veux qu'il soit simple pour les utilisateurs de postuler (une application simple patch
serait bien). Exécution diff sur le fichier donne juste Binary files [...] differ
Comment créer des correctifs binaires?
Répondre
Si vous utilisez quelque chose d'autre que le patch
standard est une option pour vous, vous pouvez consulter bsdiff
et bspatch
:
http://www.daemonology.net/bsdiff/
bsdiff et bspatch sont des outils pour construire et appliquer des correctifs aux fichiers binaires. [...]
Source assez ancienne. Il n'est pas facile de compiler avec Visual Studio moderne - avec VS 2009 cela a fonctionné, mais j'ai eu des erreurs avec des versions plus récentes. De plus, il ne s'agit que de 32 bits, ce qui est un vrai problème concernant la consommation de mémoire (voir les autres réponses). Je ne suis pas sûr, si juste compiler avec x64 corrige ceci- je suis passé à un port. NET, voir l'autre réponse. – Philm
'bsdiff' et' courgette' sont optimisés pour les binaires exécutables; trouvé quelques [binaires Windows non officiels] (http://tpokorra.blogspot.cz/2007/11/bsdiff-for-windows-and-net.html), mais il a échoué immédiatement –
En supposant que vous connaissez la structure du fichier que vous pouvez utiliser ac/C++ programme pour le modifier octet par octet:
http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx
Il suffit de lire dans l'ancien fichier, et écrivez un nouveau modifié comme vous voulez. N'oubliez pas d'inclure un numéro de version de format de fichier dans le fichier afin de savoir comment lire une version donnée du format de fichier.
Cette solution est folle. Utiliser C/C++ quand 'sed' fait déjà tout ce que vous voulez. Ou, si vous préférez utiliser un langage de programmation portable de niveau industriel, 'perl' est votre meilleur choix. Si j'écris le firmware du routeur, bien sûr, je vais utiliser C ou C++, mais en différant ...? –
Google Courgette tool ressemble le plus efficace outil pour les patchs diff binaires
comparing with bsdiff - 10 fois plus petit patch!
bsdiff mise à jour 704.512
Courgette mise à jour 78.848
Le document dit, "nous avons écrit un nouvel algorithme de diff qui en sait plus sur le type de données que nous poussons - de gros fichiers contenant des exécutables compilés". L'implication est que cela ne fonctionnera pas aussi bien (ou peut-être pas du tout) pour les autres fichiers binaires. – James
Merci pour ce lien. Mais c'est une histoire vraie pour la compiler sous Windows. Il installe d'abord un système de développement complet, par ex. Git, Python, etc. Peut-être que cela fonctionne, mais sur ma machine, le fetch a utilisé certains ports qui ont été sécurisés et qui ont échoué. Quelqu'un connaît un lien de téléchargement binaire? – Philm
@ James Courgette est un véritable successeur de 'bsdiff'. Du document: Courgette 'diff = bsdiff (concat (original, devinez), mise à jour)'. Avec un algorithme 'bdiff' raisonnable vous avez' len (bdiff (concat (original, devinez), update))
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++ ailleurs est un peu obsolète et a besoin d'au moins un peu de polissage et ne fait que 32 bits qui définit les limites réelles de la mémoire (taille de la source diff), c'est un portage de ce code bsdiff au code original). Idée supplémentaire: 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 cela a bien fonctionné pour moi, (bsdiff: fichier de 90 Mo en 1-2 min.), Et le temps critique pour moi est seulement le bspatch , pas le bsdiff.
Je ne suis pas vraiment sûr, si toute la mémoire d'une machine x64 est utilisée, mais je suppose. La construction capable x64 ("Any CPU") fonctionne au moins. Essayé avec un fichier de 100 Mo. En outre: Le projet Google Courgette cité peut être le meilleur choix si votre cible principale est des fichiers exécutables. Mais c'est un travail pour le construire (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.
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 le Mac via homebrew: brew install xdelta
Il semble être plus récente, mais sinon je ne sais pas comment il se compare à d'autres outils tels que bsdiff.
Binaires Windows: [officiel xdelta3] (https://github.com/jmacd/xdelta-gpl/releases), [non officiel xdelta] (http://www.evanjones.ca/software/xdelta-win32.html). –
- 1. Comment créer et distribuer des correctifs pour l'application Eclipse RCP?
- 2. Git: Comment créer des correctifs pour une fusion?
- 3. Git travaillant avec des correctifs
- 4. Liste des correctifs VS2010 disponibles
- 5. Comment appliquer des correctifs de sécurité
- 6. Où trouver des correctifs Android?
- 7. Comment libérer des correctifs pour les programmes Java
- 8. Files d'attente Mercurial: combiner des correctifs
- 9. distribution de logiciels et gestion des correctifs
- 10. Comment fonctionnent les correctifs dans Git?
- 11. Comment les petits correctifs logiciels corrigent-ils les gros logiciels?
- 12. Comment installer des correctifs de sécurité dans Magento?
- 13. Comment envoyer des correctifs dans .net au client
- 14. Correctifs Visual Studio 2008
- 15. Comment transférer des données binaires avec Python?
- 16. Comment décompresser des fichiers binaires avec Perl?
- 17. Comment fusionner plusieurs fichiers de correctifs?
- 18. Commettre des binaires sur SVN
- 19. Génération de correctifs JBPM Workflow
- 20. Versionnement des assemblages d'application distribuée avec des correctifs à chaud
- 21. Comment puis-je ajouter des binaires complets à un correctif Mercurial?
- 22. Comment puis-je forcer qtcreator à créer des binaires non-universels?
- 23. Comment créer des binaires Unix et Linux à partir du code Python
- 24. Java chargement des fichiers binaires
- 25. Comment mettre à jour l'application Windows installée (création de correctifs)
- 26. Impossible d'obtenir des correctifs géographiques pour l'émulateur Android
- 27. Comment concaténer des chaînes avec des valeurs binaires en python?
- 28. Comment créer des diagrammes pour des documents
- 29. Bibliothèques binaires
- 30. Problèmes de correctifs CoreImage dans 10.6
Connexes: http://stackoverflow.com/questions/688504/binary-diff-tool – miku
Note: La question http://stackoverflow.com/questions/688504/binary-diff-tool-for-very-large -files est pour Windows seulement – Tino