前回に、次回にはいよいよバイナリファイルの具体的な解説に入ると 予告しましたが、もうひとつお膳立てが必要なことを忘れていました。 それが、16 進ダンプとバイナリエディタです。次回こそは バイナリファイルの解説に入ります。
今回は、バイナリファイルをこれのような文書や解説書の上で 表現するときの決まりというか慣例に関する話です。
テキストファイルは、バイトの並びを文字として解釈したものなので、 こういった解説書でテキストファイルを引用したいときには、 そのまま文字として書き表せば、ことは済みます。
一方、バイナリファイルは、バイトの並びをテキストとして以外の解釈方法で 解釈したものです。そんな多種多様な解釈方法のものを、 ひととおりの方法で表記できるということ自体、 かなり無理があります。そこで、解釈を加える以前の生のバイトの内容を そのまま表記してやるという方法を使います。 そこで、賢明な読者は思うかも知れません。「すべては解釈であって、 バイトの本来の姿などないはずだ。今までそう説明してきたではないか。 今さら、生のバイトとは何事だ」と。全くその通りです。しかし、 コンピュータがバイトを解釈するときに、基本的な解釈方法が 2 通りありました。 そのひとつが、バイトを 0〜255 の数値として解釈する方法でした。 ここでは、それを用います。
しかし、データとはバイトが一列に並んだものだからといって、 そのまま数値を一列に並べても、分かりづらいだけです。 そこで考案された表記方法が、16 進ダンプです。
16 進ダンプにも、細かい点でいくつか違った表記方法がありますが、 次に示すのはその一例です。
00000000 47 49 46 38 37 61 64 00-64 00 B3 00 00 00 00 00 GIF87ad.d.ウ..... 00000010 FD D7 BD FD A7 8D BF BF-00 00 00 BF BF 00 BF 00 .ラス.ァ坐ソ...ソソ.ソ. 00000020 BF BF C0 C0 C0 80 80 80-FF 00 00 00 FF 00 FF FF ソソタタタ........... 00000030 00 00 00 FF FF 00 FF 00-FF FF FF FF FF 2C 00 00 .............,..
これは、MS-DOS の DUMP コマンドを使って、 j-pa.gif の先頭の 32 バイトの内容を表示したものです。
いちばん左に 8 桁の数字があります。これは、ファイルの先頭からの アドレスを 16 進数で表したものです。次に、2 桁の 16 進数が 16 個続いています。これが、肝心のファイルの内容です。最後に、 変な文字が続いていますが、これはファイルの内容を ASCII コード やシフト JIS コードを用いて文字として解釈したときの内容です。
これを見ると、GIF ファイルの先頭は ASCII コード表記で「GIF」で 始まるらしいという見当がつきます。また、GIF ファイルの内部構造を 知っていたなら、6 バイト目からの 64 00 64 00 という内容を見ることで、 この画像のサイズは 100ドット×100ドットであるということが分かります (16 進数の 64 は 10 進数の 100)。
ところで、昔は (といってもほんの 10 年ほど前)、この 16 進ダンプが プログラムリストと称して雑誌などに載ることもありました。 それを入力して実行すると、ゲームができたりしたのです。
もちろん、テキストファイルの 16 進ダンプを見ることも可能です。 というか、16 進ダンプの世界では、 テキストファイルもバイナリファイルのひとつにすぎません。
00000000 3C 48 54 4D 4C 3E 0D 0A-3C 48 45 41 44 3E 3C 54 <HTML>..<HEAD><T 00000010 49 54 4C 45 3E 31 36 20-90 69 83 5F 83 93 83 76 ITLE>16 進ダンプ 00000020 82 C6 83 6F 83 43 83 69-83 8A 83 47 83 66 83 42 とバイナリエディ 00000030 83 5E 3C 2F 54 49 54 4C-45 3E 3C 2F 48 45 41 44 タ</TITLE></HEAD
さて、テキストファイルを作成・変更するためにエディタがありました。 同じように、バイナリファイルを作成・変更するためにはバイナリエディタ があります。
バイナリエディタには、フリーのものがあります。たとえば MS-DOS では MDe が有名です。ぼくが MS-DOS 上で初めて作ったプログラムは バイナリエディタでした。また、商用エディタの MIFES にはバイナリエディタが 付属しているそうです。Windows 用にもフリーのものが何種類かあるようです。 バイナリエディタは、テキストエディタとは比べものにならないくらい簡単に 作成できるので、気に入ったものがなければ作るということも可能です。
バイナリエディタは、上記の 16 進ダンプの上をカーソルを動かし、 キーボードから 16 進数を入力することでファイルの内容を 変更するというものです。
たとえば、NEC 版 MS-DOS Version 5.00A-H の COMMAND.COM の中を バイナリエディタで覗いてやると、
000082E0 B7 82 B5 8D 9E 82 DD 2C-0D 0A 25 83 52 83 7D 83 キし込み,..%コマン 000082F0 93 83 68 82 DC 82 BD 82-CD 83 74 83 40 83 43 83 ドまたはファイル 00008300 8B 96 BC 82 AA 88 E1 82-A2 82 DC 82 B7 2E 0D 0A 名が違います...
という部分があります。どうやら、ここをいじってやれば MS-DOS の メッセージを変えれそうな気がします。そこで、
000082E0 B7 82 B5 8D 9E 82 DD 2C-0D 0A 25 83 52 83 7D 83 キし込み,..%コマン 000082F0 93 83 68 82 DC 82 BD 82-CD 83 74 83 40 83 43 83 ドまたはファイル 00008300 8B 96 BC 82 AA 88 E1 82-A4 82 ED 82 A2 2E 0D 0A 名が違うわい...
としてやると、予想通りの結果になりました。
A:\>WrongCommand コマンドまたはファイル名が違うわい. A:\>
というぐあいです。なお、COMMAND.COM などの重要なファイルをいじるときは、 必ずバックアップをとっておいてください。元に戻らなくなったり、 間違って壊してしまったりしてもぼくは責任を負いませんので。
今回でバイナリファイルに慣れたところで、 次回こそいよいよ具体的なバイナリファイルの解説に入ります。 ご期待ください。