HSPプラグインモジュールhspdaで変数の内容を保存したファイルの構造

HSPプラグインモジュールhspdaで変数の内容を保存したファイルの構造

を、調べてみました。バイナリエディタで。
むか~し、なんかのデータを保存するのにhspdaって便利だな~と思っていたんですが、実はバイナリエディタで開くとデータそのまま入ってるんですよね。
「だから何?」という人もいるかもしれませんが、内容見られたくないやつを保存しようと思ってこれなら見られないと思ってる人が結構いるので (昔は自分もその一人でした…) 、実際に保存したファイルの中身をのぞいてみようと思います。
例:
ソース:

#include "hspda.as"
a="kerupani"
b=100
vsave_start
vsave_put a
vsave_put b
vsave_end "data"

保存されたデータ:

68 73 70 76 00 10 00 00 02 00 00 00 90 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 02 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 48 5D E8 01 C0 E3 28 00 0A 00 00 00 00 00 00 00 00 00 00 00 4A 00 00 00 4C 00 00 00 00 00 00 00 00 00 00 00 04 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 F0 5C E8 01 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 61 00 00 00 AA 55 40 00 00 00 6B 65 72 75 70 61 6E 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 00 64 00 00 00

まず、最初に「hspv」という文字列があります。それと、変数名のaとb、文字列のkerupaniと100を16進数にした64が↓のほうに見えます。
これだけだとわからないのでされに別のをやってみます。
例:
ソース:

#include "hspda.as"
cirno="チルノ"
atai=9
vsave_start
vsave_put cirno
vsave_put atai
vsave_end "data2"

データ:

68 73 70 76 00 10 00 00 02 00 00 00 90 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 02 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 48 5D D2 01 C0 E3 EF 01 0A 00 00 00 00 00 00 00 00 00 00 00 4E 00 00 00 53 00 00 00 00 00 00 00 00 00 00 00 04 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 F0 5C D2 01 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 63 69 72 6E 6F 00 00 00 AA 55 40 00 00 00 83 60 83 8B 83 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 74 61 69 00 09 00 00 00

ここでひとつわかりました。文字列の変数の場合、

変数名 00 00 00 AA 55 40 00 00 00 文字列 (後に、それぞれがどんな意味か説明)
となっているんです。それに加えて数は
変数名 00 16進数
です。
あと、ファイルの最後は00 00 00のようです。 (後に違うことが判明)
HSPで文字列型変数使うと最初は64バイトなので64バイト保存されてそのすぐ後に次の変数のデータが保存されているのがわかります。ということは、最初のほうでどこからどこがなんのデータなのかを示すデータが入っているはず…。
変数~データ変数~データ…のデータがあるのはアドレス0x90の所からなので、その前までを比較してみたところ、次のようになりました。
(背景が黒くなっているのが比較すべき範囲で赤色の(反転して水色になっている)ところが違うところ)
う~ん…よくわからん…。
あ、文字列の長さ64バイトって、16進数にすると40だから…。40を探すと…あ、もしかして「変数名 00 00 00 AA 55 40 00 00 00 文字列」の「変数名 00 00 00 AA 55 40 00 00 00 文字列」がそれなんじゃあ…。
で、実際にsdimでやってからやってみたところ、確かにそうなりました。
文字列のデータは
変数名 00 00 00 AA 55 文字列長さ 00 00 00 文字列
となっているようです。
それと、今気が付いたんですけどHSPで扱える数って32ビットだから4バイトあればいいはず…ということはhspdaのデータの最後が00 00 00なんじゃなくてそこまで含めて数のデータだったのか!
ということは、0x90から見ていって、文字列があったらまず変数名として、00 00 00 AA 55が来たら文字列型として次の4バイトが文字列の長さで (数の変数が32ビットなのと同様に考えられるため) そのあと文字列が来て、文字列が終了したらまた変数名としてNULLがひとつだけですぐ数字来たら数値型、とすればいいのかな…?
結局現段階ではここまでしかわかりませんでした。
最初の144バイトが何を意味しているのかはまた今度調べようと思います。では。
↓クリックしてくれたらうれしいかも