Команда hexdump

Команда hexdump предназначена для вызова одноименной утилиты, осуществляющей вывод содержимого бинарных файлов. При этом помимо стандартного формата вывода, знакомого по hex-редакторам, утилита поддерживает различные экзотические форматы вывода, а также позволяет пользователю самому описывать необходимый ему формат вывода. При установке пакета с утилитой в системе создается символьная ссылка с именем hd, позволяющая вывести содержимое бинарного файла в классическом формате.

Базовый синтаксис команды выглядит следующим образом:

$ hexdump [параметры] имя-бинарного-файла

Утилита позволяет задать длину исследуемого фрагмента файла в байтах с помощью параметра -n, сдвиг от начала файла в байтах с помощью параметра -s, задать строку форматирования с помощью параметра -e, а также выбрать формат вывода с помощью одного из описанных ниже параметров. Чтобы было понятнее, для начала создадим текстовый файл со строкой "linux-faq.ru" с помощью следующей команды:

$ echo "linux-faq.ru" > hexdump.txt

Проверим содержимое этого файла:

$ cat hexdump.txt
linux-faq.ru

Теперь используем команду hexdump без каких-либо параметров для исследования этого файла:

$ hexdump hexdump.txt
0000000 696c 756e 2d78 6166 2e71 7572 000a
000000d

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

$ hexdump -x hexdump.txt
0000000 696c 756e 2d78 6166 2e71 7572 000a
000000d

Используем параметр -b для исследования файла:

$ hexdump -b hexdump.txt
0000000 154 151 156 165 170 055 146 141 161 056 162 165 012
000000d

В этом формате после шестнадцатеричных значений сдвигов выводятся восьмеричные значения каждого из байтов файла.

Используем параметр -c для исследования файла:

$ hexdump -c hexdump.txt
0000000 l i n u x - f a q . r u n
000000d

В этом формате после шестнадцатеричных значений выводятся непосредственно символы.

Используем параметр -d для исследования файла:

$ hexdump -d hexdump.txt
0000000 26988 30062 11640 24934 11889 30066 00010
000000d

В этом формате после шестнадцатеричных значений сдвигов приводятся десятичные представления пар байтов.

Используем параметр -o для исследования файла:

$ hexdump -o hexdump.txt
0000000 064554 072556 026570 060546 027161 072562 000012
000000d

В этом формате после шестнадцатеричных значений сдвигов приводятся восьмеричные представления пар байтов.

Наконец, используем параметр -C для исследования файла:

$ hexdump -C hexdump.txt
00000000 6c 69 6e 75 78 2d 66 61 71 2e 72 75 0a |linux-faq.ru.|
0000000d

Это классический формат hex-редакторов, который предусматривает вывод шестнадцатеричных значений всех байтов файла с соответствующими им символами.

Примечание: существует команда hd, реализованная в виде символьной ссылки на бинарный файл утилиты hexdump с параметром -C. Ее удобно использовать для исследования бинарных файлов, так как не приходится запоминать необходимый параметр утилиты hexdump.

Примеры использования

Исследование заголовка бинарного файла

Для исследования заголовка бинарного файла следует использовать параметр -n, позволяющий задать длину этого заголовка, а также параметр -C, активирующий удобный формат вывода:

$ hexdump -n 41 -C hexdump.zip
00000000 50 4b 03 04 14 00 08 00 08 00 55 b0 4d 4d 00 00 |PK........U.MM..|
00000010 00 00 00 00 00 00 0d 00 00 00 0b 00 20 00 68 65 |............ .he|
00000020 78 64 75 6d 70 2e 74 78 74 |xdump.txt|
00000029

В выводе несложно обнаружить имя находящегося в архиве файла hexdump.txt.

Исследование завершающей секции бинарного файла

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

$ hexdump -s 115815 -C rg1024-grass.tga
0001c467 54 52 55 45 56 49 53 49 4f 4e 2d 58 46 49 4c 45 |TRUEVISION-XFILE|
0001c477 2e 00 |..|
0001c479

В выводе ясно виден идентификатор нового формата файла TGA.