SSブログ

孤独へ向って突っ走れ (43) [  PC-98x1(補完計画)]

過去の記事を調べてみたら、どうやらテニス・テニス2の解析を始めたのは、6月11日だったらしい。最初は、Windowsの「メモ帳」にEXEを読み込んでみるという「誰にでも出来てちょっと楽しい作業」から始まった。先がどうなるかは五里霧中だった。あれからちょうど2か月が経ち、私は残念ながら疲労を感じている。色々なファクターが作業に影響する。体力、気力、集中力、自由になる時間、ストレス、そして様々なことを考えなければならない人生で現在気持ちがどこに向いているか。

今日は、今までに解析や画像表示のために作った簡単な自作プログラムを確認して、作業開始から2か月の区切りとしたい。


teniteni2
テニス・テニス2の*.PICファイルと*.PALファイルを使って絵をGIFファイルに変換し、Windows上で見られるようにする。このプログラム自体はもう完成していて、後はそれぞれのPICに対応するPALを探し出す作業が残っているだけ。しかしこの最後に残った作業がいちばん大変だ。

call1
call3
EXEファイル内で特定のサブルーチンを呼び出している場所を見つけてテキストファイルに書き出す。
near callはcall命令直後からの相対アドレスで飛び先を指定するので、逆アセンブル結果でCALLの後に記されたアドレスをそのままEXEファイル内で探しても見つからない。このプログラムを使えば逆アセンブル結果でCALLの後に記されたアドレスを指定するだけでその呼び出し場所を見つけることができる。
call1は一度にひとつのサブルーチンを対象とし、call3は一度に3つのサブルーチンを対象とする。call1のほうはずいぶん使っている。これがなければコードの特定の部分から遡って追跡する作業は無理だろう。

mov
EXEファイル内で特定のaddressにたいしてmov word ptr [address],immediateを処理している場所を見つけてテキストファイルに書き出す。
逆アセンブル結果を見たところ、私が知りたいアドレスから値を読み取る時はいつもアドレスを即値で指定しているので、書き込む時もそうだろうと思い作ってみたが、残念ながら大抵は別の方法を使っているらしく、期待したほどの利用価値はなさそうだ。

sub98d0
「テニス・テニス2」のプログラムでは、画面に表示する文字列はEXEファイル内に格納されており、データセグメントにロードされる。これを表示するにはサブルーチン98D0を呼び出す。このサブルーチンではaxの値とそこから算出されるデータセグメント上の値をもとに、データセグメントに置かれた「ファイル読み取り情報」のアドレスにたどりつく。後はDOSのシステムコールでファイルから読む。この仕組みは早くからわかっていたが、今までは必要に応じて手作業で計算やデータセグメント上の値の参照をしていたので、画面に表示する文字列を知るのがとても面倒だった。そこで、プログラムを組んで作業を自動化した。

jmp
EXEファイル内で特定のアドレスへ無条件ジャンプしている場所を見つけてテキストファイルに書き出す。
これは必要に迫られて今日作ったばかり。いずれは、条件ジャンプも扱えるようにする必要が出るかもしれない。


上記の自作プログラムのほとんどは、Microsoft Visual Studioの環境内から実行するようになっている。その理由は簡単で、Windowsプログラム(少なくともC系)では、ただユーザーが数値を入力するというだけのために余計なコードをずいぶん書かなければならない。書くだけならいいが、書いたことに間違いがあればそれにたいするデバッグをしなければならない。私一人が使うとわかっているプログラムのために、そんなデバッグの手間をかける必要はない。

sub98d0だけは個人的な事情があって数値入力をMicrosoft Visual Studioのエディタからでなくプログラム起動後のダイアログボックスからするようにした。これのためにずいぶん時間を取られて私は後悔した。今後の作業が「先の見えない作業」になりつつあり、その焦りから、「表示されるテキストがわかれば少しでも手がかりになるんじゃないか」と短絡的思考に走りプログラムを組んだのだが、実際のところプログラム解析の基本は地道な作業であり、テキストに頼ってするのは解析というよりも推測になってしまうから、あまり利用価値がない。後で冷静になった時点で、私はさらに後悔した。

このまま利用価値がないのも残念すぎるので、ここで少しだけ遊ばせてほしい。すごくつまんない遊びだ!(やけっぱち)

今までに「テニス・テニス2」のEXEファイルから逆アセンブルしたコードは山のようにある。その中から任意にひとつのcall 98d0を選ぶ。(これがトランプマジックだったら今後の展開にドキドキなんだけど、今回はマジックじゃないよ。なんか "どうでもいい文字列" が出てくるだけだ。)

tt49.gif
選んだのは、こんなのだった。

tt50.jpg
次に、sub98d0.exeを起動するよ。そんでもって0026(ただの26でもいいけど)を打ち込んでOKだ。そうすると・・・何が出てくるかは私にもわかっちゃいない。でもどうせ「テニス・テニス2」のテキストのどれかだけどね。

tt51.jpg
すぐに結果が表示されるんじゃないのかよ!っていうか、これ作ったの私だろ!
あ、そうか、コピー&ペーストできるようにテキストファイルに書き込んだんだっけ。

tt52.jpg
そうですか。試合がありますか。試合といえば、いまちょうどオリンピックの最中です。日本の床の演技はド素人の私が見てもすごかったです。私も、なんとかしてもっと人生を頑張らねばなりません。ああ、いけない、急にテンション下がって話し方まで変わってしまった。私に元気がないのにはわけがあるんです。創味シャンタンの真実は白い缶の中に。私の真実は、このブログの中に。

コメント(0) 

コメント 0

コメントの受付は締め切りました