Разница в формате hexdump и xxd

Я искал, как сделать обратную hexdump и нашел упомянутый xxd. Тем не менее, это не похоже на работу с:

xxd -r hexdumpfile > binaryfile

Затем я сравнил разницу между выходами xxd infile а также hexdump infileи нашел три отличия:

  1. Выход xxd имеет двоеточие после адреса
  2. Вывод xxd имеет обратные позиции в данных (например, 5a42 в hexdump вывод становится 425a в xxd выводе)
  3. Есть несколько дополнительных символов после каждой строки

У меня есть только шестнадцатеричная версия определенных файлов на сервере. Как я могу правильно вернуть двоичные данные, используя xxd?

5 ответов

Я не знаю ни одной команды, которая бы выполняла преобразование, но ее легко разбить на несколько шагов:

  1. Убрать адреса из hexdump вывод с использованием sed
  2. Преобразовать в двоичный файл, используя xxd
  3. Endian-преобразование (например, 5a42 становится 425a) с помощью dd

Вот полная команда:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile

Вы можете сделать преобразование в одном sed команда. Достаточно добавить : после адреса и сменить порядковый номер (переключение ab12 в 12ab).

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' dump | xxd -r

Попробуйте добавить-p.

      xxd -r -p hexdumpfile > binaryfile

Ты можешь сказатьhexdumpсбросить его в форматеxxdпримет со строкой формата:

      hexdump -ve '1/1 "%.2x"' mybinaryfile > mydump

Это дает тот же результат, что и:

      xxd -p mybinaryfile > mydump

Затем вы можете скопировать и вставить или передать вывод и преобразовать его обратно:

      xxd -r -p mydump mybinaryfileagain

Или:

      xxd -r -p < mydump > mybinaryfileagain

Раньше мы использовали модем X/Y/Z, который доступен в комплекте поставки.lrzszчто еще более эффективно, но это двунаправленный протокол, поэтому двоичные файлы должны работать одновременно и должна быть двунаправленная связь:

      mkfifo /tmp/fifo-in
mkfifo /tmp/fifo-out
sz -b mybinaryfile > /tmp/fifo-out < /tmp/fifo-in
mkdir out; cd out
rz -b < /tmp/fifo-out > /tmp/fifo-in

К счастью, screen поддерживает прием Zmodem, поэтому, если вы находитесь в сеансе Screen:

      screen
telnet somehost

Затем введитеCtrl+Aи:а потомzmodem catchи . Затем на экране удаленного хоста введите:

      # sz -b mybinaryfile

НажиматьEnterкогда вы увидите строку, начинающуюся с «!!!».

Когда вы увидите «Перенос завершен», вы можете запуститьresetесли вы хотите продолжить сеанс терминала в обычном режиме.

Вы можете просто использовать приведенные ниже вещи

  1. Получить шестнадцатеричный дамп в нужном формате

    hexdump -Cv <двоичный_файл.bin> > двоичный_файл.txt

-C будет печатать данные побайтно

-v не будет использовать * для повторяющегося контента

  1. Теперь вам нужно удалить первые и последние несколько символов из файлаbinary_file.txt для каждой строки. Вы можете использовать команду sed здесь.

  2. Теперь используйте команду xxd

    xxd -r -p двоичный_файл.txt > восстановление_двоичного_файла.bin

  3. Вы можете проверить сумму md5 обоих файлов. Оно должно соответствовать

    md5sum двоичный_файл.bin

    md5sum Recovery_binary_file.bin

Другие вопросы по тегам