2013-05-05 2 views
1

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

Затем я создаю второй двоичный дамп и сравниваю два файла в vim с помощью xxd для создания двоичных-текстовых представлений исходных данных.

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

Можно ли сказать diff или vimdiff сказать, сравнить два файла, и показать мне только части файла, в котором в исходном файле (то есть: файл 1) значение было равным 1, а во втором файла, значение было установлено на 32?

Спасибо!

ответ

6

Я использую:

diff <(xxd file1.bin) <(xxd file2.bin) 

Это использует process substitution сравнить вывод двух xxd процессов. Обратите внимание, что это все еще показывает разницу в линиях, поэтому, если какой-либо байт на строке отличается, он будет указан. Это дает хорошее сравнение с шестнадцатеричным взглядом.

Классический инструмент для этого, однако, является cmp.

Таким образом, это может быть обработан следующим образом:

cmp -l file1.raw file2.raw | grep -in "oldValue" | grep -in "newValue" 

Это будет список именно то, что вам нужно, со следующими полями распечатанными:

OFFSET VALUE_IN_FILE_1 VALUE_IN_FILE_2 
+0

Это предлагает сравнение текста режим работы вывод двух двоично-текстовых файлов, которые я уже создаю в 'vim'. Как это относится к проблеме сравнения по конкретным полям, учитывая, что я знаю, что одно поле будет начинаться со значения 'x', а во втором файле будет значение' y'? – DevNull

+2

Вы посмотрели 'cmp'? –

+1

Я не понимаю проблему. 'cmp -l' будет« Печатать номер байта (десятичный) и разные байтовые значения (восьмеричные) для каждой разницы ». Просто 'grep' через этот список для известных значений, и он даст вам десятичное смещение. –

Смежные вопросы