TF2のメモリを楽に解析する方法
SourceMOD必須
IDAとかOllyDbgとかデバッガ使って調べようかなと思ってたら(VAC BANのリスクあり)、普通にsoucemodでそういう機能が提供されてたのでメモ。
以下のコマンドを実行することでメモリ上のオブジェクトの座標をdumpして簡単に調べることが出来る
sm_dump_netprops <file>
fileのところにはファイル名を指定する。たとえば
sm_dump_netprops "./dumped.txt"
みたいな感じにすると、tf/dumped.txt に出力される
これを表示するとだいたいこんな感じ
CAI_BaseNPC: Sub-Class Table (1 Deep): DT_AI_BaseNPC Sub-Class Table (2 Deep): DT_BaseCombatCharacter Sub-Class Table (3 Deep): DT_BaseFlex Sub-Class Table (4 Deep): DT_BaseAnimatingOverlay Sub-Class Table (5 Deep): DT_BaseAnimating Sub-Class Table (6 Deep): DT_BaseEntity Sub-Class Table (7 Deep): DT_AnimTimeMustBeFirst -Member: m_flAnimTime (offset 132) (type integer) (bits 8) -Member: m_flSimulationTime (offset 136) (type integer) (bits 8) -Member: m_vecOrigin (offset 780) (type vector) (bits 0) -Member: m_ubInterpolationFrame (offset 140) (type integer) (bits 2) -Member: m_nModelIndex (offset 114) (type integer) (bits 12) Sub-Class Table (7 Deep): DT_CollisionProperty -Member: m_vecMinsPreScaled (offset 8) (type vector) (bits 0) -Member: m_vecMaxsPreScaled (offset 20) (type vector) (bits 0) -Member: m_vecMins (offset 32) (type vector) (bits 0) -Member: m_vecMaxs (offset 44) (type vector) (bits 0) -Member: m_nSolidType (offset 65) (type integer) (bits 3) -Member: m_usSolidFlags (offset 60) (type integer) (bits 10) -Member: m_nSurroundType (offset 64) (type integer) (bits 3) -Member: m_triggerBloat (offset 66) (type integer) (bits 8)
クラス名とそのメンバ変数のメモリ上での座標が取得できる。これを利用してメモリ上のこれらの位置に値をセットすることでリアルタイムにゲーム世界に影響を与えることができる。