バイナリ
バイナリとは
バイナリ(binary)とは2進法のことです。デジタルコンピュータが扱う全ての データはバイナリデータです。ファイルに保存されるデータや通信パケットなどは、 バイナリデータとして読み書きされたり送受信されたりします。バイナリデータとテキストデータ
バイナリデータであっても、ASCIIやUnicodeなどの文字コードに対応したデータ のことをテキストデータといいます。テキストデータは人間が見て認識できるデー タです。ビットとバイト
ビット
ビット(bit)は2進数の1桁のことです。ビットはbinary digitの略です。 ビットは情報の最小単位です。1ビットで1か0の2つの状態を表現できます。 2bitでは00、01、10、11の4つの状態、3bitでは000、001、010、011、100、 101、110、111の8つの状態を表現できます。nビットで2nの状態を表現できます。ビットと数値
ビットの集まりを2進数と考えると、数値として捉えることができます。 たとえば、10(2)は2(10) 、11(2)は3(10) 、100(2)は4(10) 、101(2)は5(10) のように、 2進数を10進数に変換して対応させることができます。バイト
ビットを8個集めた単位をバイト(byte)といいます。1バイトは8ビットなので、 00000000~11111111までの256個の状態を表現できます。正の整数値と考えると、 0~255を、負の数も考慮すると-128~+127を表現することができます。16進数
N進数
1桁にN個の数字を使うのがN進数です。2進数は0と1の2個、8進数は0~7の8個、 10進数は0~9の10個の数字を使います。N個の数字で表せない時に桁上がりします。16進数
10進数より大きいN進数では数字が0~9では足りません。そのため、16進数では AからFまでの6個のアルファベットを数字の代用にします。 16進数のaは10進数の10、bは11、cは12、dは13、eは14、fは15になります。 ※ a~fは、大文字のA~Fでもかまいません。16進数の表記方法
16進数は、数値の先頭に0xを付加して、0x1、0xa、0x3bのように表記することが あります。0h、0ah、3bhのように末尾にhを付加して表記することもあります。 (a~fで始まる数値は先頭に0を付加します)。 ※ 0xは0X、hはHのように、大文字で表記してもかまいません。バイナリファイル
バイナリファイル
テキストデータを格納したファイルをテキストファイルといいます。 テキストデータはバイナリデータの一種なので、テキストファイルを含む全ての ファイルはバイナリファイルです。バイナリファイルの種類
バイナリファイルには次のような種類があります。 ⚫ 画像ファイル ⚫ オーディオファイル ⚫ 動画ファイル ⚫ アーカイブファイル ⚫ 圧縮ファイル ⚫ アプリケーションデータファイル ⚫ 実行形式ファイルビューワ
バイナリファイルを表示するためには、対応するビューワ(viewer)を使用します。ファイルフォーマット
ファイルフォーマットとは
ファイルフォーマットは、ファイルを保存する形式のことです。ファイルフォーマッ トはファイルの種別と考えることもできます。 ファイルフォーマットには、ISOやJISなどの標準化団体が制定した規格や、特定の OSやアプリケーション用に独自に定められた規格があります。ヘッダ情報
フォーマットによっては、ファイルの先頭にファイルのメタ情報を格納することが あります。これをヘッダ情報といいます。マジックナンバー
ファイルは拡張子によって種別を判断できる場合もありますが、完全ではありません。 ファイルの種別をあらわすために、ファイルの先頭に格納された数バイトのデータを マジックナンバー(magic number)といいます。ダンプ
ダンプ
データの解析や修復のために、ファイルやメモリの内容を出力することをダンプ (dump)といいます。ダンプの出力先はファイルや画面などです。 バイナリファイルをダンプすることを、バイナリダンプといいます。 バイナリダンプでは16進数を用いるのが一般的です。odコマンド
od(octal dump)コマンドは、バイナリファイルの内容を8進数や16進数でダンプ するコマンドです。ASCIIコードに対応する文字を表示することもできます。 odコマンド以外に、hexdumpコマンド、xxdコマンドでダンプすることもできます。 xxdコマンドは-bオプションを指定することで、2進数でダンプすることができます。[odの実行例]
odはオプションを指定しないと8進数でダンプする-Axでアドレスを16進数、-txでデータを16進数でダンプする
リトルエンディアンなのでバイトが逆順で表示される
-t1でデータを1バイトずつ、-tzでASCIIコードを表示する
対応するASCII文字 文字として表示できない場合ドットで表示される
[hexdumpとxxdの実行例]
◆hexdumpで16進数ダンプする(-C オプションはASCIIコードも表示する)$ hexdump -C random.dat
00000000 f5 38 56 16 32 6c 35 bc cc ac 23 c3 e8 3b 1b 7b |.8V.2l5...#..;.{|
00000010 ab 4b 13 e7 bd c3 7e 19 7d 43 41 07 6e 37 71 e7 |.K....~.}CA.n7q.|
00000020
◆xxdで16進数ダンプする(ASCIIコードも表示される)
$ xxd random.dat
00000000: f538 5616 326c 35bc ccac 23c3 e83b 1b7b .8V.2l5...#..;.{
00000010: ab4b 13e7 bdc3 7e19 7d43 4107 6e37 71e7 .K....~.}CA.n7q. 13 e7 bd c3 7e 19 7d 43 41 07 6e 37 71 e7 |.K....~.}CA.n7q.|
00000020
◆xxdで2進数ダンプする(-b オプションは2進数でダンプする)
00000000: 11110101 00111000 01010110 00010110 00110010 01101100 .8V.2l
00000006: 00110101 10111100 11001100 10101100 00100011 11000011 5...#.
0000000c: 11101000 00111011 00011011 01111011 10101011 01001011 .;.{.K
00000012: 00010011 11100111 10111101 11000011 01111110 00011001 ....~.
00000018: 01111101 01000011 01000001 00000111 01101110 00110111 }CA.n7
0000001e: 01110001 11100111
[odによるマジックナンバーの確認]
ELF形式(Linuxの実行形式)
$ od -Ax -tx1z what-1 | head -1
000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 >.ELF............<
ZIP圧縮形式
$ od -Ax -tx1z what-2 | head -1
000000 50 4b 03 04 14 00 00 00 08 00 55 50 44 4e ea f3 >PK........UPDN..<
PNG画像形式
$ od -Ax -tx1z what-3 | head -1
000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 >.PNG........IHDR<
GZIP圧縮形式
$ od -Ax -tx1z what-6 | head -1
000000 1f 8b 08 08 ab de 4d 5c 00 03 6c 65 61 66 2e 70 >......M¥..leaf.p<