разница между форматами hexdump и xxd

разница между форматами hexdump и xxd

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

xxd -r hexdumpfile > binaryfile

Затем я сравнил разницу между результатами xxd infileи hexdump infileи обнаружил три отличия:

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

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

решение1

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

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

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

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

решение2

Этот ответ является кросс-постом отhttps://stackoverflow.com/a/52834021/6770384

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

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

Известные ошибки(см. раздел комментариев)

  • Если исходный файл имел нечетную длину (например, 1, 3, 5, 7, ..., байт), добавляется конечный нулевой байт.
  • Повторяющиеся разделы исходного файла не восстанавливаются корректно, если они были hexdumpотредактированы с использованием  *.

решение3

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

xxd -r -p hexdumpfile > binaryfile

решение4

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

  1. Получить hexdump в требуемом формате

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

-C выведет данные побайтно

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

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

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

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

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

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

    md5sum восстановить_бинарный_файл.bin

Связанный контент