hexdump とは?
url: https://hana-shin.hatenablog.com/entry/2022/03/31/200457
title: "hexdumpコマンドの使い方 - hana_shinのLinux技術ブログ"
description: "1 hexdumpコマンドとは? 2 検証環境 3 オプション一覧 4 事前準備 5 オプションなしで実行した場合 6 ASCII文字を表示する方法(-C) 7 表示する範囲を指定する方法 7.1 先頭からnバイトを表示する方法 7.2 sバイト目からnバイトを表示する方法 7.3 sバイト目から最後まで表示する方法 8 繰り返し部分を表示する方法(-v) Z 参考情報 1 hexdumpコマンドとは? ファイルの内容を8進数や16進数で表示するコマンドです。 2 検証環境 CentOS版数は以下のとおりです。仮想マシンは最小構成で作成しました。 [root@server ~]# cat /e…"
host: hana-shin.hatenablog.com
favicon: https://hana-shin.hatenablog.com/icon/link
image: https://ogimage.blog.st-hatena.com/17680117127115851806/13574176438078526916/1648727335
url: https://xtech.nikkei.com/it/article/COLUMN/20140224/538591/
title: "【hexdump】16進数や8進数で出力する"
description: "バイナリ・ファイルなどの入力データを、16進数や8進数をはじめ、ユーザーの指定した形式で出力する。デフォルトでは、2バイト単位の16進数4桁で出力する。"
host: xtech.nikkei.com
image: https://xtech.nikkei.com/images/n/xtech/2020/ogp_nikkeixtech_hexagon.jpg?20220512
hexdump とは binary ファイルデータを hexadecimal や octal ascii として表示し、バイナリファイルの中身を確認するコマンドです。
使ってみる
Hello, World!\x98\x99\x98\x99\aa
が書かれたファイルを作成して、それを hexdump で見てみます。
\x98\x99\aa はエディタでは識別できない 16 進数となります。
echo で -e
をつけることで escape-sequence を解釈させられます。
\x48
を 1 byte の文字として解釈させ、 H としてターミナルで表示します。
\x98
については ascii としては無効の文字です。そのため、 U+FFFD
= � として表示されます。
echo -en "\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x98\x99\x98\x99\xaa" > test1.bin
❯ file test1.bin
test1.bin: Non-ISO extended-ASCII text, with no line terminators
hexdump でよく使う形式は以下です。 これにくわえて 8 進数の表記 (-b) もおこなえます。
❯ hexdump test1.bin
0000000 6548 6c6c 2c6f 5720 726f 646c 9821 9899
0000010 aa99
0000012
playground/c-compile-assemble on feature/learn-c-compile-assemble [?] via C v17.0.0-clang [☁️ ]
❯ hexdump -c test1.bin
0000000 H e l l o , W o r l d ! 230 231 230
0000010 231
0000012
playground/c-compile-assemble on feature/learn-c-compile-assemble [?] via C v17.0.0-clang [☁️ ]
❮ hexdump -C test1.bin
00000000 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 98 99 98 |Hello, World!...|
00000010 99 aa |..|
00000012
一番使いやすい -C
(Canonical) に注目します。
echo で出力した際の \x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x98\x99\x98\x99\xaa\
が順番に表示されており、またそれを ASCII 表示したものが右端に表示されています。
また、 印字可能でない(制御文字・非印字文字・ASCII の範囲外)のバイトの場合は .
として表示されています。
縦の 00000010 はバイト単位のアドレスであり、 0x10 = 16 番地を表しています。
playground/c-compile-assemble on feature/learn-c-compile-assemble [?] via C v17.0.0-clang [☁️ ]
❮ hexdump -C test1.bin
00000000 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 98 99 98 |Hello, World!...|
00000010 99 aa |..|
00000012
C のオブジェクトファイルを見てみる
C 言語プログラムを実行するまでになにがおこなわれるか で生成した main.o を hexdump で見てみます。