コードの仕組み 上級者用参考資料

一般的なXTのコード

説明
一般的なゲームの場合データ位置が固定なので
メモリのアドレスを指定して直接書き換えるだけでチート可能です

メモリイメージ

     |     |
XXXXXXXX | YYYYYYYY | <<ここを書き換えるだけでOK
     |     |

コードの形式

XXXXXXXX <<アドレス (暗号化されているらしい)
YYYYYYYY <<データ等

PSO ver2のコード

説明
PSO Ver2の場合チート対策(?)の為かデータ位置が
固定でないので従来方法ではチートできません
どのようなデータ構造かまずは下のメモリイメージを見てください

各データは、ある程度大きさの幾つかブロックになって
メモリのどこかに配置されています。
このままだとデータが何処の位置がプログラムからも
指定できなくなるので何処から始まるかという情報を
特定の位置に持っています。
(ベースポインタ等と呼ばれる。よく使われるプログラミング技法の1つ)

このゲームの場合このベースポインタは8C4E5F80番地あたりに幾つか存在しています。

メモリイメージ

       |     |
  8C4E5F80 | XXXXXXXX | <<データブロックAの格納先アドレス
  8C4E5F84 | XXXXXXXX | <<データブロックBの格納先アドレス
  8C4E5F88 | XXXXXXXX | ↓これ以降も同じようなものが幾つか続いてるらしい
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 
XXXXXXXX+000 | ???????? | <<データブロックAの開始位置
XXXXXXXX+004 | ???????? | 
XXXXXXXX+008 | ???????? |
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
XXXXXXXX+364 | ???????? | <<(具体例)レベルの位置
XXXXXXXX+368 | ???????? | <<(具体例)経験値の位置
XXXXXXXX+36C | ???????? | <<(具体例)メセタの位置
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
XXXXXXXX+000 | ???????? | <<データブロックBの開始位置
XXXXXXXX+004 | ???????? |
XXXXXXXX+008 | ???????? |
XXXXXXXX+00C | ???????? |
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

具体的なコード例(メセタ操作の場合)

13B7D9B5\
40707044 |XTへの特別コマンド?
1C24D797 |
8C006000/
1484D086\ <<ここからアドレスと命令またはデータが交互に続いている
6112D105 |
1494D086 |
310C9005 |
14A4D086 |
2102D004 |
14B4D086 |目的の位置を操作するためのプログラム本体
402BD001 | 14C4D086 | 036C0009 < <<左半分036Cがメセタへのオフセット、右半分はプログラムの命令 14D4D086 | 8C011ECC | 14E4D086 | 8C4E5F80 | 14F4D086 | 000A0000/ <<データブロックAの格納先アドレス参照用アドレス

▲ back