Каков наилучший способ сделать патч для двоичного файла? Я хочу, чтобы это было просто для пользователей, чтобы применить (простое приложение patch
было бы неплохо). Запуск диф на файл просто дает Binary files [...] differ
Как создать двоичные патчи?
ответ
Если использовать что-то другое, чем стандартный patch
вариант для вас, вы можете проверить bsdiff
и bspatch
:
http://www.daemonology.net/bsdiff/
bsdiff и bspatch являются инструментами для создания и применения патчей к двоичным файлам. [...]
Довольно старый источник. Нелегко скомпилировать с современной Visual Studio - с VS 2009 он работал, но я получил ошибки с более новыми версиями. Кроме того, это всего лишь 32-разрядный - это реальная проблема, связанная с потреблением памяти (см. Другие ответы). Я не уверен, что если просто компилировать с исправлениями x64 это, я переключился на порт .NET, см. Другой ответ. – Philm
'bsdiff' и' courgette' оптимизированы для исполняемых двоичных файлов; нашел некоторые [неофициальные двоичные файлы Windows] (http://tpokorra.blogspot.cz/2007/11/bsdiff-for-windows-and-net.html), но он сразу же удался –
Предполагая, что вы знаете структуру файла, который вы могли бы использовать C/C++ программы, чтобы изменить его побайтно:
http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx
Просто читайте в старом файле, и напишите новый, который вам понравился.
Не забудьте указать номер версии файла в файле, чтобы вы знали, как читать какую-либо версию формата файла.
Это решение безумно. Использование C/C++, когда 'sed' уже делает все, что вы когда-либо хотели. Или, если вы предпочтете использовать портативный язык программирования для промышленной прочности, 'perl' лучше всего. Если я пишу микропрограмму маршрутизатора, конечно, я поеду с C или C++, но все равно ...? –
Google Courgette tool выглядит как наиболее эффективный инструмент для бинарных патчей дифф
comparing with bsdiff - в 10 раз меньше патч!
обновление bsdiff 704.512
обновление Цуккини 78.848
В документе говорится: «Мы написали новый алгоритм разложения, который знает больше о том, какие данные мы нажимаем - большие файлы, содержащие скомпилированные исполняемые файлы». Следствием этого является то, что он не будет работать (или, может быть, совсем нет) для других двоичных файлов. – James
Благодарим вас за эту ссылку. Но это реальная история, чтобы собрать ее под Windows. Сначала он устанавливает всю систему разработчика, например. Git, Python и т. Д. Возможно, это работает, но на моей машине выборка использовала некоторые порты, которые были защищены и провалились. Кто-нибудь знает ссылку для бинарной загрузки? – Philm
@James Courgette - настоящий преемник 'bsdiff'. Из документа: Courgette 'diff = bsdiff (concat (original, guess), update)'. С разумным алгоритмом 'bdiff' вы имеете' len (bdiff (concat (original, guess), update))
Современный порт: Очень полезный .NET порт для bsdiff/bspatch:
https://github.com/LogosBible/bsdiff.net
Мой личный выбор. Я протестировал его, и это был единственный из всех ссылок, я был в состоянии скомпилировать его (с Visual Studio, например, 2013). (Источник C++ в другом месте немного устарел и требует по крайней мере бит полирования и составляет всего 32 бит, который устанавливает пределы реальной памяти (размер источника). Это порт этого кода на C++ bsdiff и даже тесты, если результаты патча идентичны к исходному коду).
Дополнительная идея: С .NET 4.5 вы даже можете избавиться от #Zip lib, которая здесь является зависимой.
Я не оценил, если он немного медленнее, чем код C++, но он отлично работал для меня (bsdiff: 90 МБ файла за 1-2 мин.), А для меня критически важно только bspatch , а не bsdiff.
Я не уверен, если используется вся память машины x64, но я предполагаю это. Конструкция с поддержкой x64 («Любой процессор») работает как минимум. Пробовал файл размером 100 МБ.
- Кроме того: цитируемый проект Google «Цуккерт» может быть лучшим выбором, если ваша основная цель - это исполняемые файлы. Но это - работа по его созданию (по крайней мере, для Windows), а для двоичных файлов также используется чистая bsdiff/bspatch, насколько я понял документ.
xdelta - еще один вариант.
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
Он доступен на макинтош через доморощенного: brew install xdelta
Это, кажется, более поздние, но в остальном я понятия не имею, как он сравнивает с другими инструментами, такими как bsdiff.
Бинарные файлы Windows: [официальный xdelta3] (https://github.com/jmacd/xdelta-gpl/releases), [неофициальный xdelta] (http://www.evanjones.ca/software/xdelta-win32.html). –
- 1. Как создать патчи?
- 2. Git: Как создать патчи для слияния?
- 3. Как создать патчи между версиями на файл?
- 4. Как применить патчи django
- 5. Как работают патчи в Git?
- 6. Как создать кластерные патчи, которые не пересекаются между ними
- 7. Как создать двоичные файлы для виртуальных машин?
- 8. Как создать случайные двоичные числа в C++?
- 9. Как пересадить патчи в svn
- 10. Как синхронизировать настраиваемые патчи ядра?
- 11. Как применять патчи к apache?
- 12. Как применить git diff -binary патчи без git?
- 13. Как извлечь патчи фиксации из репозитория git
- 14. Патчи и обновления
- 15. Патчи в facetgrid - Python
- 16. Expression Blend 4 Патчи
- 17. Патчи в Сиборн
- 18. Создать двоичные данные с помощью Ruby?
- 19. Magento критические патчи безопасности - Как применить
- 20. Как покрасить патчи в пределах заданного прямоугольника
- 21. Как просмотреть патчи в рабочем пространстве затмения?
- 22. Как выпустить патчи для программ Java
- 23. Как добавить rt-патчи в linux
- 24. Как выбрать патчи для исправления ошибок magento
- 25. Как работают патчи и сервисные пакеты?
- 26. NetLogo - как отсортировать патчи только сверху вниз
- 27. Matplotlib удалить патчи с рисунка
- 28. Что такое патчи в Python?
- 29. использовать патчи диффузия в netlogo
- 30. Патчи, для которых учетная запись
Связанный: http://stackoverflow.com/questions/688504/binary-diff-tool – miku
Примечание: вопрос http://stackoverflow.com/questions/688504/binary-diff-tool-for-very-large -файлы для Windows только – Tino