Двоичный инструмент разметки для очень больших файлов?

Мне нужна утилита для разграничения двух двоичных файлов. Файлы большие (6-50 ГБ).

Примечание.. Здесь нужно особо указать: большинство программ diff работают путем сопоставления файла в их виртуальном адресном пространстве. В 32-битной Windows это ограничивает размеры файлов, которые можно сравнить с менее чем 1 ГБ каждый. (1,5 ГБ, если Windows запущена с помощью переключателя /3GB, и программа объявила, что это 3 ГБ, или LARGEADDRESSAWARE). Если программа настаивает на том, что метод полностью отображает файл в его адресное пространство, он должен быть перекомпилирован как 64-разрядное приложение с адресным пространством 8 ТБ (которое соответствует моим требованиям)

Beyond Compare - мой любимый инструмент для сравнения, и я владею им, но он не может обрабатывать двоичные файлы по сравнению с тем, что может быть помещено в адресное пространство процесса.

HexDiff 3.0 казался интересным, за исключением того, что пробная версия не выполняет diff.

  • инструмент должен быть бесплатным, так как я не плачу деньги, чтобы понять, что он не работает.

  • инструмент должен быть приложением Windows.

  • инструмент не должен быть консольным (то есть, приложением Windows)

  • инструмент должен быть графическим (то есть приложением Windows)

Ответ 1

Вы ищете HxD лучший и бесплатный Hex-редактор для Windows, никаких изменений, необходимых с 3 апреля 2009 года, поскольку он не содержит ошибок, просто отлично.

Его "Сравнение файлов (простое)" (Ctrl + K) делает это визуальным для любых двоичных файлов.

  • Мгновенное открытие независимо от размера файла (до 8EB) 8 ExaByte - 8 миллионов TeraByte.

Ответ 2

((bsdiff массово элита:), кроме этого)

Мне лично нравится vbindiff (режим SUA) для небольших файлов, и я проверил бета-тестирование этого инструмента blockwatch (Windows WPF, бесплатный клиент, стоимость сетевого фида), который может очень быстро подбирать подзаголовки в большом пространстве поиска контента, должен быть выпущен в ближайшее время.

Если вы используете разные исполняемые файлы, PatchDiff2 (инструмент бесплатный, IDA - $) - это плагин IDA, который доставит вас более 90-95% точности не проблема, даже с изменением в оптимизации или другими настройками сборки.

BinNavi, ($) - еще один инструмент, который неплохо работает.

Если вы хотите определить сходство двоичных файлов, STAN (работает в режиме SUA), можно прорезать пресловутую B.S. быстро, чтобы получить безопасную ставку.

Только для полноты, связанной с bsdiff, новый алгоритм Google для браузера Chrome, Courgette, похоже, улучшил bsdiff справедливое количество, будет приятно видеть, насколько хорошо он может быть адаптирован к другим форматам, он, судя по всему, использует оптимизированный поиск таблиц символов и то, что кажется (не прочитал код), улучшение, которое вы могли бы получить от использования указателей на основе (т.е. не использовать линейные адреса, а просто использовать смещение как совместимое обозначение).

Ответ 4

Традиционный способ сделать это - "cmp --verbose" (эквивалентно "cmp -l" ). Добавьте флаг "-print-bytes" (или "-b" ), чтобы отображать разные байты в читаемом формате (в дополнение к десятичным значениям и номерам байтов, предоставленным флагом "--verbose" ). Так как ваши файлы настолько велики, вы, вероятно, захотите получить выход в файл, чтобы вы могли смотреть его и все еще иметь результаты для анализа на досуге. Например, я сравниваю два похожих файла MP3:

$ cmp --verbose --print-bytes a.mp3 b.mp3 | tee differences
   16315 302 M-B  115 M
   16316 233 M-^[ 144 d
   16317 110 H    224 M-^T

.,.

21601545 377 M-^? 300 [email protected]
21601546 203 M-^C   0 ^@
21601547 300 [email protected]    0 ^@

(Конечно, укажите ваши имена файлов, cmp понимает флаг "-", если вам это нужно. Вы можете ввести "cmp -lb" вместо длинных аргументов.) Используйте wc, чтобы узнать, сколько байтов отличается

$ wc --lines differences 
66115 differences
$ wc --bytes a.mp3 b.mp3
21602502 a.mp3
21602502 b.mp3
43205004 total

cmp сравнивает только файлы по байтам (он не может повторно синхронизировать, если байты вставлены или удалены), но это похоже на то, что вам нужно. Он может обрабатывать произвольно большие файлы (и не требует больше памяти, чем для небольших файлов). Его найдены по умолчанию на Mac OS X, различных BSD и Unices и GNU/Linux-i.e., Каждый широко используемый современный O.S. кроме Windows. (Рассмотрим минимальную установку Cygwin или ее эквивалент, если это действительно ограничение.)

Хотя это, по-видимому, правильный инструмент для работы, его исключают два из ваших критериев: его "консольный" и не имеет графических компонентов. Я думаю, что в описании проблемы должно быть что-то отсутствует. Можете ли вы объяснить, почему консоль будет проблематичной, и какие дополнительные данные вам нужно визуализировать?

Ответ 5

Вы можете попробовать xdelta. Я никогда не искал версию GUI, но вы могли бы попробовать этот один (хотя он, похоже, только KDE).

Ответ 6

Я довольно хорошо использовал WinMerge, чтобы показать различия в двоичных файлах. Это бесплатно также с открытым исходным кодом.

В противном случае ваши файлы очень большие и могут не вписываться в инструмент diff - считали ли вы создание двоичного патча (например,.ppf, Playstation Patch File) и просто смотрите на это?

Ответ 7

Я работаю для ECMerge, если вы ищете инструмент для дифференциации, а не "дельта", то есть понимание разницы более важно, чем компактное представление, оно делает то, что вы хотите. Практически нет ограничений на размер файла (около ста в tera байтах), только на количество различий, чтобы предотвратить патологические различия (например, миллиарды различий).

Ответ 8

Ваши последние три требования затрудняют проблему. Что предложила бы графическая программа Windows, чтобы консольная программа на основе текста не могла? Таким образом, не так много инструментов, которые делают то, что вы хотите. Поэтому я проигнорирую последние три, возьму свою карму в руки и предложим rdiff. Это текстовые и консольные. Но он может различать двоичные файлы произвольного размера. Вы можете получить rdiff для Windows через Cygwin (http://cygwin.com).

Ответ 9

Я столкнулся с этим, ища рекурсивный инструмент сравнения двоичных файлов лучше, чем те, которые я уже использую.

Я знаю один, который может соответствовать вашим требованиям. Единственный способ, которым это было бы неудачно, - это размер файлов, но это стоит того. Он называется Windiff и поставляется с различными версиями инструментов Windows/пакетов расширения/независимо от того, что они называются. Я обнаружил, что он работает очень хорошо.

Ответ 10

вы можете попробовать vbindiff, http://www.cjmweb.net/vbindiff/

это консольное приложение, однако это очень хорошо сделано, поэтому я считаю его графическим - вы получите разделенный экран, который показывает два файла бок о бок в шестнадцатеричном формате.

он предназначен для обработки больших файлов, я просматриваю 2 8GB файла прямо сейчас.

Ответ 11

Вы можете попробовать hexdiff, если он компилируется на окнах. Он основан на консоли, но имеет графический вывод, и я видел разницу между двумя файлами объемом 5 ГБ без проблем.

Ответ 12

Поскольку файлы настолько огромны, и у вас, вероятно, есть несколько отличий, diff будет слишком большим, чтобы вписаться во все стандартные приложения Windows. Поэтому мой подход:

  • Преобразование файлов в текст. Используйте шестнадцатеричный самосвал командной строки или, что еще более полезно, напишите небольшую программу, которая понимает, что означает двоичные данные, поэтому вы можете сравнивать значимые данные, а не битовые отходы.

  • Используйте инструмент командной строки командной строки (например, один из cygwin). Инструменты командной строки GNU могут обрабатывать произвольно большие файлы.

  • Проверьте результат с помощью less. Вы можете утверждать, что вам захочется увидеть все различия, но если вы не иностранец в человеческой форме, ваш мозг не может даже содержать содержимое целого экрана с текстом в своей рабочей памяти. Поэтому, если вы действительно хотите чего-то добиться, вы должны уменьшить объем данных, которые у вас есть для глазного яблока.

Ответ 13

Это еще одна рекомендация для HxD http://mh-nexus.de/en/hxd/ - я просто использовал ее для разграничения двух файлов объемом 3 ГБ MXF для проверки того, где коррупция создает кадр происходило. Операция заняла около 10 секунд, тогда как Araxis Merge (мой традиционный и очень любимый инструмент diff) удалось использовать всю память на машине и все еще не работал для этой операции.