Cheat Engineで使う重要な用語
Static Address 静的アドレス
Cheat Engineの検索結果で緑字で表示されるアドレス。画像の赤枠部分。
静的アドレスは再起動してもアドレスが変わりません。
Cheat Engineはスキャンしてヒットしたアドレスが、プログラムの.dataセクション内にあるかどうかで静的か動的かを判断しているようです。.dataセクションにはプログラム内で使うグローバル変数と静的変数が格納されています。
マルチレベルポインターの場合、この静的アドレスをコードファインダーやポインタースキャンで見つけにいくことになる。
Dynamic Address 動的アドレス
黒字で表示されるアドレス。画像の青枠部分。
プロセスが起動してから、動的に確保されたメモリを示すアドレス。
プログラムは実行中に必要な時に必要なサイズだけヒープと呼ばれる領域にメモリを確保している。
これをメモリの動的確保という。
どのアドレスにメモリを確保するかはOSが自動で決めるため、再起動した時には場所が変わっており参照できなくなってしまう。「せっかく値を見つけたのにゲームを再起動したら使えなくなった」となるのはこれが原因である。
Base Address ベースアドレス
起点になるアドレス。オフセットと一緒に使われる。
何をもってベースというのか難しいが、多くの場合メモリに実体化された構造体またはクラスの先頭アドレスだと思われる。
ゲーム内のプレイヤー(敵も含めて)の情報はC言語でいう構造体、C++でいうクラスで管理されている。また、プレイヤーの情報にアクセスするためのベースになるアドレスをプレイヤーベースと呼ぶ。
Offset オフセット
ベースアドレスからの相対的な距離。
例えば、プレイヤーの体力のアドレスを特定したとき、
ほとんどの場合、このオフセットが使われている。
例:ベースアドレス + オフセット = 体力のアドレス
マルチレベルポインターのイメージ図
Cheat Engineで静的アドレスを見つける場合は、最初に体力のアドレスを見つけて次に青矢印のように順々にバックトレースしていきます。図は簡略化したもので、実際の解析ではオフセットを伴うので、もう少し複雑になります。
- 関連記事