Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【ファイル】バイナリファイルの中身を表示する

Linuxの標準コマンドであるodコマンドを使う。

例えば、メモ帳で編集できるテキストファイルはメモ帳で開くと表示されるが、そうではないバイナリファイル(.exeファイルなど)はメモ帳では中身を確認することができない(めちゃくちゃに表示される)。このコマンドを使うことで、数値で表示することができる。以下は、WindowsMinGWのMSYSに含まれるodコマンドを使用した際の例。わかりやすいように、テキストファイルを使用している。 以下のテキストファイルをメモ帳で作成し、ファイル名をtext.txtとして保存する。ファイルサイズは20バイトになるはず(1×3 + 2 + 3×3 + 2 + 1×2 + 2 = 20 bytes、Windows 10のメモ帳はデフォルトでは日本語コードはUTF-8、改行コードは0D 0Aであり、ひらがなや漢字は3バイトで符号化され、改行文字は2バイトであることに注意。)。

ABC
あいう
12

odコマンドを実行して表示する。

>od text.txt
0000000 041101 006503 161412 101201 100743 161604 103201 005015
0000020 031061 005015
0000024

odコマンドはデフォルトでは8進数表記をする。これを16進数表記にするばあいは-tオプションにx1を付ける。x1とすれば1バイトごとに、x2とすれば2バイトごとに表示される。

>od -t x1 text.txt
0000000 41 42 43 0d 0a e3 81 82 e3 81 84 e3 81 86 0d 0a
0000020 31 32 0d 0a
0000024

ファイルの中身(41、42、…、0aまでの20個)は1バイトごとに表示されるが、左側の連番は8進数表記のままになっている(8進数の20は10進数では(2×8=)16)。この連番をわかりやすく10進数表記にする場合は-Adオプションを使う。

>od -Ad -t x1 text.txt
0000000 41 42 43 0d 0a e3 81 82 e3 81 84 e3 81 86 0d 0a
0000016 31 32 0d 0a
0000020

各行、1バイトごとに16個(バイト)表示され、最終行に表示されたとおりに、ファイルサイズは20バイトであることが分かる。アルファベットの「A」は1バイトで、ASCIIの16進数表記で41(10進数の41ではない)であることがわかる。 連番も16進数表記する場合は、-Axオプションを使う。

>od -Ax -t x1 text.txt
000000 41 42 43 0d 0a e3 81 82 e3 81 84 e3 81 86 0d 0a
000010 31 32 0d 0a
000014