ベースポインタに対応したSSGファイルを作ろう!
ここまで来たらあと少しです!
さっそく、先ほど作成したSSGファイルを確認してみましょう。
先ほど、囲みの中の内容を記載しましたが、これを少し編集して使用します。
まずは、先ほどのベースポインタを記述するための箱を用意します。
そうですね、この[group]MAIN 〜 [/group]までを丸ごとコピーして、上の方に複製しましょう。
コピーをしたら、上の方に複製した[group]MAIN 〜 [/group]の中にある、
[subject]VP:calc,0x05BD1E98,0,65535,unsigned
のコードを、下にある
[replace]0x00,LOS2sample->MAIN
で上書きしてしまいましょう。
上書きをしたら、囲いの部分を次のように書き換えます。
[replace]_[:0x87FA68:],LOS2sample->MONEY
先に変更したので分かりにくいですが、最後に下の[group]MAINの記述とVPを次のように書き換えます。
[group]MONEY [subject]VP:calc,0x1E50,0,65535,unsigned [/group] |
これで、ベースポインタを考慮したSSGが完成しました!
とはいえ、最後の方が少々分かりにくいので、簡単に説明すると、
[replace]はオフセット値ということで、次に読み込むアドレスに、
この[replace]で記載した数値を加算しなさい、という意味です。
[:0x87FA68:]は、87FA68に格納されている値をアドレスとして読み込みなさい。という意味です。
[: :]をつけないと、そのまま87FA86を加算することになりますので注意が必要です。
また、[: :]の前に_(アンダーバー)をつけることも必須です。
[subject]VP:calc,0x1E50,0,65535,unsignedは、
最初に作成した内容とほぼ変わりありませんが、
上記の[replace]で[:0x87FA68:]のアドレス値を加算しているため、
前章で逆アセンブリをかけたときの[EAX+1E50]の1E50をアドレスとして入力しています。
(EAXの値は、[:0x87FA68:]のアドレス値と同じため)
オフセット値を使わない場合は0が加算されている、と考えるのも一つの方法かと思います。
以上ですべての作業が終了です!
参考までに、当方で作成したサンプルがこちらにあります。
サンプルをダウンロード
<BACK>変動アドレスの解析〜ベースポインタを探せ!〜
TOPに戻る
<あとがき>
ここまでご覧いただきましてありがとうございました!
実際に当方が行っている方法の一部を説明しましたが、いかがだったでしょうか?
HPの冒頭でも記載しておりますが、ここまでの内容はあくまでも初心者へのステップアップを目指した内容だと思います。
実際に本格的な解析を行ったら、他にもSSGのコードが必要になったり、いろいろと息詰まることが出てくると思います。
解析をするにあたって、0章でも記載させて頂きましたが、最後は根気とやる気です。
どんなに知識がついても、いざ解析を始めたら時間がかかるときはかかりますし、
本当にややこしいプログラムとかになると投げ出したくもなります。
ゲームを楽にする反面、下手したらそれ以上の努力が必要になるのが解析の難しさ・大変さだと思います。
それでも、やってみると解析って意外と楽しいんだ!って思って頂ければ幸いと思います。
また、ゲームの解析・改造をするという行為は、ゲームを楽にするだけではありません。
逆にゲームの難易度を上げたりも出来たりします。
(敵の攻撃力を倍にしたり、耐久力のあるアクションゲームで、ダメージ受けたらゲームオーバーとか)
そういった可能性を秘めているのがゲーム解析の醍醐味でもあります。
自分もゲームをプレイするだけでなく、解析の楽しさにのめり込んだ者として、
一人でも多くの方が解析にチャレンジして頂き、
また一人でも多くの方が、解析を通じて新たなゲームの楽しみ方や発見があれば、
今回このHPを立ち上げた者としても非常に嬉しく思います。
最後に重ね重ねになりますが、
ツール開発や従前から解析に携わっている関係者の皆様、
ゲームのスクリーンショット公開の許可を頂きました こんすとらくた様、
最後までお付き合い頂きました全てのユーザーの皆様に、
感謝と御礼を申し上げて、当方のご挨拶とさせて頂きます。