第3回  「バイナリエディタを使ってみる」





セーブデータの形式

突然ですが、第1回でテキストファイル「sample1.txt」を書き換えた時の事を思い出して下さい。
この時、書き換えが成功したかどうかの確認には、メモ帳等のテキストエディタを使用しましたね?
ですが、ゲームのセーブデータというのは普通「バイナリファイル」形式になっています。
この場合、メモ帳などで内容を確認する事ができません。
では、どうすればよいのでしょうか!?


バイナリファイルって!?

テキストファイルとバイナリファイルの見分け方を、滅茶苦茶大雑把に説明します。

テキストファイル・・・メモ帳で開いたとき、ちゃんと読める物(普通の字が書いてある物)
バイナリファイル・・・それ以外

はっきりいって、相当無理のある説明なんですが、今はとりあえずこのように覚えておいて下さい。
それぞれの特徴は、テキストファイルはテキストエディタで、バイナリファイルはバイナリエディタで
書き換える事ができる、という事です。
(テキストファイルはバイナリエディタで書き換える事も一応できます)

それでは実際に、「sample1.txt」をテキストエディタとバイナリエディタを使って開いてみましょう。
(バイナリファイルは各自で入手しておいて下さい)

sample1.txt (改造前)(テキストエディタで開いた時)
1111111111111111111111111
1111111111111111111111111

sample1.txt (改造前)(バイナリエディタで開いた時)
[OFFSET] +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789abcdef
00000000 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00000010 31 31 31 31 31 31 31 31 31 0D 0A 31 31 31 31 31 111111111**11111
00000020 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00000030 31 31 31 31 0D 0A 1111**
注)画面の右側に表示されている「*」は、本当は半角の「・」です。


とまあ、こんな感じになったと思います。
テキストエディタでは「1」が1行目に25個、2行目にも25個表示されていますね。
一方、バイナリエディタでは、1行目に「31」が16個、2行目に「31」が9個、
「0D」「0A」が1個ずつ、また「31」が5個・・・というようになっています。

そして、その右端にも何か表示されており、1行目に「1」が16個・・・という感じになっています。
このままではよく分からないと思いますので、少しだけバイナリエディタの表示画面の見方を説明しましょう。

まず、1番左上の「31」を見て下さい。これは、「00000000」行「+0」列目に存在しています。
これは、アドレス「00000000」番地の値が「31」である事を意味します。
同様にその1つ右側の「31」は、「00000000」行「+1」列目にありますので、「00000001」番地の値という事になります。

つまり、行の見出しはアドレスの上位2桁以上を、列の見出しはアドレスの下1桁を表しているのです。
このように見ていくと「00000035」番地の値は「0A」という事になりますね。
分かりましたか?

また、「31」とか「0D」というのは、そのアドレスに書かれている値を16進数で表示したものです。
例えば、半角数字の「1」はコンピュータの内部では16進数の「31」で表現されていますので、
ここに並んでいる「31」は、実際には数字の「1」という事になるわけです。

これを簡単に表示しているのが、画面右側の「0123456789abcdef」の部分です。
これは、それぞれのアドレスに格納されている16進数の値を、人間が見やすいテキスト表示で表現したものです。
だからこの場合は、「1」がずら〜と並んでいるわけなんですね。
ちなみに、「0D」「0A」とは、改行の事なのですが、これはそのまま表現できない為、図のようになっています。


さて、それでは改造後の画面も同じように見ていきましょう。

sample1.txt (改造後)(テキストエディタで開いた時)
1111111111111111a11111111
1111111111111111111111111

sample1.txt (改造後)(バイナリエディタで開いた時)
[OFFSET] +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789abcdef
00000000 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00000010 61 31 31 31 31 31 31 31 31 0D 0A 31 31 31 31 31 a11111111**11111
00000020 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00000030 31 31 31 31 0D 0A 1111**


どうです?変化した場所と値は分かりましたか?(赤色で表示されている部分)
今回使用した改造コードは「10-61」でしたね?
ということは、アドレス「10」番地を「61」に置き換えなさいという意味になるんでしたね。
そして、「61」とは「a」をコンピュータ内部の16進数の形で表現したものでした。
となれば、この改造が成功した事が理解して頂けると思います。


少し早いですが、第3回はここまでとさせて頂きます。
次回は、メモリ改造の説明をしていきます。



前に戻る     次に進む

講座の初めに戻る