●PerlでONS バイトコード私見2
続き…の前に。
バイトコードの場合、私は一度似非バイナリダンプ(アドレス無視なので似非)として
一度全バイトを16進数でテキストに落としてから処理をしています。 → かにしのでの似非ダンプスクリプト
当然ながら始めは整形が全くされてないので、解析しながら改行を入れていきます。
例)かにしの 改行前(テキストエディタで途中を折り返し表示)%00%26%00%00%00%01%03%e6%03%00%00%14%00 %00%00%00%00%03%01%e4%03%00%01%00%00%82 %e8%03%00...↓ 改行後%00%26%00%00 %00%01%03%e6%03%00%00%14%00%00%00%00 %00%03%01%e4%03%00%01%00%00%82%e8%03%00
こんな感じ。
※しかし"%"はなんなのか? いえ16進表記の"x"の替わりと思ってください…。
あまり意味はないのですがアルファベット以外で区切りたかったのです。
では昨日の続きでおとボク、とはいえ詳細な手順を書いても自己満足に過ぎないので簡単に。
まずは通しで増えていく数値があったので、そこを頭とみなして区切ってみました。
my $foo = $data;
LABEL:for ( my $i = 0 ; $i <= 65535 ; $i++ ){ #0から
my $var = sprintf("%04x",$i); #10進数→16進数に ex.500→0x01f4
$var =~ /([0-9A-Fa-f][0-9A-Fa-f])([0-9A-Fa-f][0-9A-Fa-f])/;
my $num = "\%$2\%$1"; #リトルエンディアンで ex.0x01f4→F4 01
$foo =~ /(.*?)$num(.*)/ or last LABEL; # ex.%f4%01 がなければ終了
my $res = $1; #あればそこで区切り
$foo = $2; #残りを次のループへ
$result .= "$res<$i>";
}
区切った結果、どうもこの通番はメッセージの番号を表しているようだと気づき、次の手がかりに。
メッセージ部分では単純に上から番号を割り振っている様子。
その番号のメッセージが立ち絵ならば、その前後は立ち絵表示のコード、
台詞ならば台詞の…といった具合で進めていきました。
なお 64(100) や F4 01(500) など切りの良い数値は時間や拡大率などで頻出するため要チェック。
16進計算が出来る電卓をディスプレイの隅に置いておくと便利かも。
さてメッセージの箇所が分かったので、実プレイとも照らし合わせながら似非バイナリを整形します。
手動である程度解析・整形が出来たならば、次はPerlで整形用のスクリプトを組んでみる段階へ。ぞく。
(やっぱり等幅フォントが反映されない…orz)
コメント
お久しぶりです。
こちらが最近悩んでいたスクリプトの暗号解読やテキスト整形について、これだけの解説を頂けることは、得がたいほどに貴重であり、感謝に絶えません。
こちらの大好きなキャラメルBOXのコンバータについては、特にありがたいです。いつか、この知識を何とか生かしたいと思います。
nota様の方でも、色々と親切な解説がなされているようで、興味津々です。
まだ、C言語の基礎知識すらない有様ですが、そこから勉強するだけの価値はあります。
Perlだって、まだ学んだばかりですが、何作がコンバータを作ることはできましたので、何とかしたいと思います。
こちらの近況としては、ようやくmjdisasmの扱いが解ってきたため、Majiro作品のコンバータの作成に取り掛かった所です。・・・たしかに、これは優秀なツールですね。現在、カタハネコンバータを照らし合わせて、製作中ですが、こういう作業をすることで、改めてひとつもり様の苦労が伺えます。よくお一人でこれだけのことを・・・と、今更ながら感心します。
先日の赤線街路コンバータでの立ち絵のマスク処理のツールを、無断で使用させていただくなど、お世話になりっ放し・・・さらに、今回のスカーレットの際にも、カタハネコンバータがメインになります。さすがに、そのままでOK、というわけにはいきませんが、かなりの部分が流用できます。macro.ksや、tjsファイルで、非常に拡張性の高い吉里吉里よりも、Majiroの方が、流用率は高いです。それだけひとつもり様コンバータが優秀である、という証明でもあります。
こちらの技量は、まだまだ未熟なため、(まだ画面のスクロールも満足にに出来ないし・・・)今回は時間がかかりそうですが、何とか完成させたいと思います。
・・・恐らく、このブログにおいて、最も自分が恩恵を被っていると思います。改めてお礼を申し上げるとともに、年始の挨拶をしたいと思います。帰省するため、しばらくネットには繋げそうもないので・・・
それでは、今回はこれで失礼します。
こんにゃくコンバータの作成、頑張ってください。
Posted by: HARU | 2007年12月31日 05:15
遅くなってしまい申し訳ありません。
やっぱり自己満足な感じになってしまった感があるので、ご覧頂けて(更に反応もして頂けて)大変嬉しいです。
技量と言いますが私も車輪の国なんかは何も分からず酷いものでした。透過もまともにしてなかったし…。
何であれ経験を積めばこの程度にはなるという証左ですので是非ともに。
…や、この程度って言ってもあくまで過去との相対的にですよ?
私も本当にまだまだ勉強中ですので。
カタハネも今見ると何だこりゃって処理が多いのですが、流用出来るなら何よりです。
あとスクロールですか…うーん、
座標の増分が逆だったりとか陥りがちですので、その辺を見直してみるのもいいかもしれませんと適当に発言をばm(_ _)m
ではでは、本年もよろしくお願いします。
Posted by: ひとつもり | 2008年01月03日 21:39