AVG32の解析は順調だけど、SEEN.TXTをいじって実際の命令の動作を変更できれば確認しやすいと思ったので、下記のSEENファイルの構造を解説してくれているサイトを参考に自分でSEEN.TXTの展開および再結合ツールを作ってみた。バグあったので修正(2007/08/09)。ついでにSEEN.TXTを展開すると出てくるSEEN124.TXTなどのシナリオファイルからテキスト部分のみを抽出する簡易ツールも追加。
- SEENファイルのフォーマット
- http://www.geocities.jp/hiko_bae/seenfileformat.html
pactools 0.01 seentools 0.0.1
- 15:52+09:00">pactools 0.01 seentools 0.0.1 for SLシリーズZaurus:http://www.areanine.gr.jp/~nyano/archives/slzaurus/seentools_0.0.1-1_arm.ipk
- 15:52+09:00">pactools 0.01 seentools 0.0.1 for Windows:http://www.areanine.gr.jp/~nyano/archives/nikki/seentools001.zip
AVG32のSEEN.TXTなどで使われているPACL形式&PACK形式のファイルを解凍、再圧縮するツール群。Windows用はGCC 3.3.3からなるMinGW日本語版(mingw-jp-20040224)で、Zaurus用はGCC 2.95.1からなるdev-img.bin パッケージ化群(dev-3)でコンパイルした。ソースは共通でWindows用パッケージに含まれている。
エラーチェックは一切行ってないし、同名のファイルは上書きされるし、再圧縮は各ファイルを無圧縮で格納するので以前よりファイルサイズが大きくなるし、逆にファイルサイズが小さくなった場合の動作が考慮されていないので使う際には注意。
「x0 SEEN.TXT」「unpacl SEEN.TXT」で含まれるファイルをカレントディレクトリに解凍。「u0 SEEN.TXT」「udpacl SEEN.TXT」で含まれるファイルをカレントディレクトリから持ってきて再圧縮ってな具合。当然、後者はSEEN.TXTが更新されるのでオリジナルは残しておくのが吉。「seentxt SEEN124.TXT log.txt」でシナリオファイルをテキスト化してlog.txtに出力できる。
SEEN.TXTの構造
AVG32のシナリオデータ「SEEN.TXT」はテキストファイルではなく、複数のファイルが圧縮されたもの。
ヘッダ部
- 先頭32バイトはヘッダ部。
- 最初の16バイトは0x00で終わる文字列。識別用文字列で「PACL」と書かれている。
- 次の4バイトはリトルエンディアンの数値。含まれているファイルの数を示す。
- 残り12バイトは0x00で埋められており、未使用エリアだと思われる。
ファイル情報
データ本体(ヘッダ部)
データ本体(実際のデータ)
- ヘッダ部の後からが実際のデータとなる。
- 1バイト取り出して、上位ビットから順番に1なら続く1バイトをそのまま出力、0なら続く2バイトをリトルエンディアンの数値として上位12ビット+1が「既に出力したデータ」の何バイト前から、下位4ビット+2で示した数だけ繰り返し出力することを示す。この時、繰り返し出力したデータも「既に出力したデータ」に含まれる。
- 上記のデータ展開をデータ本体の解凍後の大きさになるまで繰り返せばデータを解凍できる。