od - ファイルをバイナリで表示する

スポンサーリンク

odコマンドは、ファイルをバイナリとして表示することができます。

問題によって、ファイルのバイナリを確認することで解決することもあります。

スポンサーリンク

odコマンドとは

odコマンドは、デフォルトで入力ファイルを8進数表示で出力します。

オプションを用いることで、表示するバイナリデータを分かりやすくすることもできます。
odコマンドは、非表示文字を確認する、バイナリファイルのヘッダを確認するなどを行うことができ、トラブルシュートを行うときに利用できるコマンドです。

 

 

 

odコマンド利用例

8進数でバイナリを表示
(オプションなし)

odコマンドをオプションなしで、利用すると8進数(octal)形式で表示を行います。
また、一番左の列にある数字はオフセットであり、バイナリデータのアドレスになります。
このオフセットもデフォルトでは8進数形式で表示されます。

コマンド例

test.txt

実行結果

 

 

 

オフセットの基数を変更
(-Aオプション)

-Aオプションは、一番左にある列のオフセットの基数を変更または非表示にすることができます。
基数のデフォルトは8進数で変更できる基数は以下のようになります。

変更できる基数

記号 意味
d 10進数(decimal)
o デフォルト:8進数(octal)
x 16進数(hexadecimal)
n 非表示(none)

 

オフセットの10進数表記

一番左の列のオフセットが10進数表記になります。

コマンド例

test.txt

実行結果

 

オフセットの16進数表記

一番左の列のオフセットが16進数表記になります。

コマンド例

test.txt

実行結果

 

 

 

オフセットの非表示

一番左の列のオフセットが非表示になります。

コマンド例

test.txt

実行結果

 

 

 

エンディアンの変更
(--endianオプション)

--endianオプションは、入力バイトの順番をビックエンディアンまたはリトルエンディアンに変更することができます。
オプションに指定できる文字は、「little」または「big」になります。

 

リトルエンディアン

コマンド例

test.txt

実行結果

 

 

 

ビックエンディアン

コマンド例

test.txt

実行結果

 

 

 

入力バイトをスキップ
(-jオプション)

-jオプションは、入力ファイルの出力を指定したバイト数だけスキップすることができます。
-jオプションを用いる場合、10進数表記のほかに8進数表記や16進表記を用いることができます。

 

例えば、16バイトをスキップするとしたら、10進数表記で「16」、16進数表記で「0x10」、8進数表記で「020」というように、16進表記では接頭辞として0xを、8進数表記では接頭辞として0をつけます。

 

また、接尾辞としてKやMの文字を用いることができます。

よく使われる接尾辞

接尾辞 数値
b 512 blocks
KB 1000 kiloBytes
K 1024 KibiBytes
MB 1000*1000 MegaBytes
M 1024*1024 MebiBytes
GB 1000*1000*1000 GigaBytes
G 1024*1024*1024 GibiBytes

 

コマンド例

test.txt

スキップする前のバイナリデータ

実行結果

 

 

 

出力バイト数を指定
(-Nオプション)

-Nオプションは、出力バイト数を指定することができます。接頭辞や接尾辞の指定は、-jオプションと同じなります。

コマンド例

test.txt

実行結果

 

また、-jオプションと併用することができます。

コマンド例

実行結果

 

 

 

バイナリファイルに含まれる文字列を表示
(-Sまたは--strings)

-Sまたは--stringsオプションは、C言語の実行ファイル等のバイナリファイルに含まれる文字列を表示することができます。

-Sまたは--stringsオプションの引数として、バイトを指定します。
このバイト数は、バイナリファイルに含まれる文字列が少なくとも指定したバイト数以上の連続するASCII文字ならば表示するという意味になります。
-Sオプションの場合はバイト数を必ず指定しなければなりませんが、--stringsオプションの場合はバイト数を指定しなければ、デフォルトとして3が指定されます。

コマンド例

または

a.outの作成に使用したソースコード(hello.c)

実行結果

 

 

 

表示するバイナリの形式を変更
(-tオプション)

-tオプションは、出力されているバイナリデータの表示方法を変更することができます。
利用できる記号の種類は以下の通りになります。

-tオプションで利用できる記号の種類

記号 意味
a 文字表示(named character)
c 1バイト文字、Cのエスケープ文字、3桁の8進数で表示
d 符号付き整数(signed decimal)
f 小数(floating point)
o 8進数(octal)
u 符号なし整数(unsigned decimal)
x 16進数(hexadecimal)

 

-tオプションで利用できる記号の種類は複数回使用でき、使用した記号の順番で出力が行われます。

コマンド例は16進数で表示を行います。また、この表示はリトルエンディアンで表現されています。また、-tオプションに関しては他のコマンド例を別途後述します。

コマンド例

test.txt

実行結果

 

 

aとc以外では、記号の次にデータ型を表す数字を指定するとそのデータ型で表示を区切ります。

コマンド例

実行結果

 

 

数字の他には、Cコンパイラでの組み込みのデータ型でも指定を行うことができます。

データ型の種類

記号 意味
C char
S short
I int
L long

 

コマンド例

実行結果(-x1オプションの結果と同じ)

 

 

浮動小数点表記のfの記号のためには、また別の浮動小数点用のデータ型を指定します。

データ型の種類(fの記号のための記号)

記号 意味
F float
D double
L long double

 

コマンド例

実行結果

 

 

 

任意の記号の文字の最後にzをつけると、出力されたバイナリ形式の行に1バイト文字表現が追加されます。

コマンド例

実行結果

 

 

全ての行を表示
(-vオプション)

odコマンドは、同一の行を出力する場合、アスタリスクを表示して行の出力を省略します。

コマンド例

test_vopt.txt

実行結果

 

-vオプション用いると、省略しないように全ての行を表示します。

コマンド例

実行結果

 

 

 

出力する行の幅を指定
(-wまたは--widthオプション)

-wオプションまたは--widthオプションは、数値を指定すると指定した数値の幅で出力行を表示します。
-wオプションまたは--widthオプションを指定しない場合のデフォルトは16になります。
また、--widthオプションの場合、数値を省略できます。その場合の数値は32になります。

コマンド例

test.txt

実行結果

 

-tオプションの例

記号 a

named characterとして文字を表示します。

コマンド例

test2.txt

実行結果

 

 

記号 c

1バイト文字、Cのエスケープ文字、3桁の8進数を用いて、出力します。

コマンド例

test2.txt

実行結果

 

 

記号 d

符号あり整数(signed decimal)で出力します。
また、記号の後にデータ型を表すバイト数を入力するとそのデータ型のバイト数を区切りとして表示を行います。

コマンド例

test2.txt

実行結果

 

記号 f

小数表現(float)として出力します。
また、記号の後にデータ型を表すバイト数を入力するとそのデータ型のバイト数を区切りとして表示を行います。

コマンド例

test2.txt

実行結果

 

 

 

記号 o

8進数(octal)で出力します。
また、記号の後にデータ型を表すバイト数を入力するとそのデータ型のバイト数を区切りとして表示を行います。
コマンド例は、リトルエンディアンとして表現されています。リトルエンディアンかビックエンディアンかは、システムによって異なります。指定する場合は--endianオプションを使用してください。

コマンド例

test2.txt

実行結果

 

 

記号 u

符号なし整数(unsigned decimal)として出力します。
また、記号の後にデータ型を表すバイト数を入力するとそのデータ型のバイト数を区切りとして表示を行います。

コマンド例

test2.txt

実行結果

 

記号 x

16進数(hexadecimal)で出力します。
また、記号の後にデータ型を表すバイト数を入力するとそのデータ型のバイト数として表示を行います。
コマンド例は、リトルエンディアンとして表現されています。リトルエンディアンかビックエンディアンかは、システムによって異なります。指定する場合は--endianオプションを使用してください。

コマンド例

test2.txt

実行結果

 

 

 

複数の記号の使用

-tオプションに用いる記号は複数回用いることができます。-tオプションの後に記述された記号の順番に出力が行われます。

コマンド例は、文字表示(a)、1バイト区切りの8進数表記(o1)、1バイト区切りの16進表記(x1)を2回表示します。また、zの記号を任意の記号の後に記述することで、その記号で出力された行に対して、1バイト文字表現が追加されます。

コマンド例

test2.txt

実行結果

 

参考

外部リンクGnu Coreutils

外部リンクGnu Coreutils日本語版