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