ポインタとはメモリ上にアドレスが表示されているところをいいます。
まあ辞書でいう目次だか索引みたいなものだと思ってください。
ポインタ(固定アドレス)
|-基準アドレス(ポインタに入っているアドレス値)
基準アドレス+差(オフセット)で特定のデータにアクセスする
--------------------------------------------------------------
オフセット=0の場合
数値サーチとかででてきたアドレスに+0x8800000してサーチしてみる。
運がよければこれだけで見つかります。+0x8800000を足す理由はPSPの実メモリの0x8800000がCWCアドレス0になっているからです。CWCがアドレス部に+8800000してコード処理していると思われる?
PSP 0x8000000 特権用仮物理アドレス?
|
|
|
PSP 0x8800000 CWC開始アドレス0x0000000
|
|
|
PSP 0xA000000 CWC終了アドレス0x1800000
例:SO1のアイテムなど
----------------------------------------------------------------
オフセット=0で無い場合
cwcだと候補が10までしかでないため、SCMMOD/FreeCheatやCheatMasterFusionを使う
例:みんごる,FreeCheat/SCMMOD使用
風のアドレスは文字列サーチで3d/windのところから常に-0x8Bしたところにあります。今回は0x009D9B08から-0x8Bなので0x009D9A7Dが風力のアドレスになる。ここで0x009D9A7Dに0x8800000をたすと0x091D9A7Dになる。さらに上位ビットの0x091Dで16bitサーチをして0x091D9A7Dに近そうなアドレスだけメモする。
リセットするなりしてもう一度しらべる
アドレス | 1回目 | 2回目 | 3回目 |
---|---|---|---|
方向 | 0x09D9A36 | 0x8452B6 | |
3D/WIND | 0x09D9B08 | 0x888B78 | 0x845388 |
風 | 0x09D9A7D | 0x888AED | 0x8452FD |
アドレス候補 | 1回目メモリにある値;差分 | 2回目〃;差分 | 3回目〃;差分 |
---|---|---|---|
0x3641A4 | 0x091D9720;0x35D | 0x09088790;0x35D | 0x09044FA0;0x35D |
0x33ECA4 | 0x091D9670;0x40D | 0x090886E0;0x40D | 0x0904AE80;×一致せず |
0x3424EC | 0x091D93F0;0x68D | 0x09088460;0x68D | 0x0904AB00;×一致せず |
0x34258C | 0x091DBB70;0xF3 | 0x0908ABE0;0xF3 | 0x0904AE90;×一致せず |
#差分=|メモリにある値-(kaze+0x8800000)|
3641A4がポインタアドレスだとわかるのであとはコード化
6aaaaaaa 000000vv
000t0001 0000ssss
aaaaaaa=3641A4,vv=00~7F 逆風FF~7F,t=0(8bit),ssss=035D
だいたい差分が一番近いのが使えます。慣れれば鶴使用より早い場合もあ
るのでサーチして候補がおおい場合以外はやってみたほうがいいかも。
追記:FCだと数値フィルターがあるので0x8800000でふるい落とすと見やすくなります。
-----------------------------------------------------------------
例2;パズルクエスト(動画付き)
1;数値サーチでお金のアドレスをわりだす、サーチは初期化(最初からやり直し)にしておく
2:数値サーチで 数値0x880 範囲0xA00 で16bitサーチ,終わったら範囲を0000に戻す
3;1でだした0xD930A0 の5桁目以降 0xD9に0x880を足した0x959で16bitサーチ アドレス範囲を1の0xD930A0以下にする
4;残りの4桁 30A0に近そうな物を選ぶ 3020 の2つが該当
5;オフセットを計算してあとはコード化
#2~3を省略して32bit 数値(お金のアドレス+0x8800000-0x1000) 範囲(お金のアドレス+0x8800000+0x1000)でも可能
#+-0x1000で見当たらないときはオフセットを調整する
-----------------------------------------------------------------
例:PATAPON2体験版ステータス、CMFusion使用
最初に比較を選択します。
YGF_GFPからPATAのデータらしきものが並んでるのでこれをメモっておく。DUMPをとってじっくり観察すればわかります。
ステージ中1回目
ステージ中2回目の時、再サーチする。数値比較は使えないのでTXTサーチを利用する。
□で変化量が指定できるので(ベースアドレスの変化)=0xFB0F40-0xEC88C0=0xE8680
を入力して、減少を選択します。
数値0x8800000未満のものはポインタではないのでふるい落とします。数値大で0x8800000を入力して実行。
結果はほぼ1つしかでません。あとは確認だけ。
ステージ中2回目で再確認して終了。ここはオフセ0なので一番上の方法でもでるけど。
DUMPを眺めると、unit2からが弓ポンの初期データになっており、各unitのでーたさいずが0x1C0なので2*0x1C0,YGF_GFPからunit0までが0x80。unit2のオフセットが0x400になる。
あとはメモリでステータスの差分をしらべてコード化するだけです。入れっぱなしだとフリーズするのでPADが必須。