Разница в формате hexdump и xxd
Я искал, как сделать обратную hexdump и нашел упомянутый xxd. Тем не менее, это не похоже на работу с:
xxd -r hexdumpfile > binaryfile
Затем я сравнил разницу между выходами xxd infile
а также hexdump infile
и нашел три отличия:
- Выход xxd имеет двоеточие после адреса
- Вывод xxd имеет обратные позиции в данных (например,
5a42
в hexdump вывод становится425a
в xxd выводе) - Есть несколько дополнительных символов после каждой строки
У меня есть только шестнадцатеричная версия определенных файлов на сервере. Как я могу правильно вернуть двоичные данные, используя xxd?
5 ответов
Я не знаю ни одной команды, которая бы выполняла преобразование, но ее легко разбить на несколько шагов:
- Убрать адреса из
hexdump
вывод с использованиемsed
- Преобразовать в двоичный файл, используя
xxd
- 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
Ты можешь сказать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
если вы хотите продолжить сеанс терминала в обычном режиме.
Вы можете просто использовать приведенные ниже вещи
Получить шестнадцатеричный дамп в нужном формате
hexdump -Cv <двоичный_файл.bin> > двоичный_файл.txt
-C будет печатать данные побайтно
-v не будет использовать * для повторяющегося контента
Теперь вам нужно удалить первые и последние несколько символов из файлаbinary_file.txt для каждой строки. Вы можете использовать команду sed здесь.
Теперь используйте команду xxd
xxd -r -p двоичный_файл.txt > восстановление_двоичного_файла.bin
Вы можете проверить сумму md5 обоих файлов. Оно должно соответствовать
md5sum двоичный_файл.bin
md5sum Recovery_binary_file.bin