Cheat Engine Lua デバッギング

LUAスクリプトによるデバッガの制御を有効にするための機能が用意されています。
  • openProcess(name) - 実行中のプロセスを開く
  • debugProcess() - プロセスのデバッグを開始する
  • debug_setBreakpoint(address) - 指定したアドレスにブレークポイントを設置する。オプションのパラメータはsizeとtype。
  • debug_continueFromBreakpoint(method) - 実行を再開する, 指定できるメソッドは "co_run"、"co_stepinto"、"co_stepover"のいずれか
("co_runtill"がTContinueOption内で用意されているがmain.luaには示されていません。これはおそらく実行するためのアドレスを知っている必要があるからでしょう。)

さらに、ブレークポイントがヒットするたびにチートエンジンによって呼び出されるdebugger_onBreakpoint()というイベント関数を定義することも可能です。ここで"Space Pirates and Zomies"で装甲を減少させる船を追跡する例を示します。0x406002をデバッグすることによって、ECXが0x60で装甲フロートの構造体へのポインタを保持していることが分かります。このコードはアドレスを鍵として装甲テーブル内のこれらの値を追跡し、実際の装甲の値を示します:

if not armors then
 armors = {}
end

function debugger_onBreakpoint()
 if (EIP ~= 0x00406002) then return 0 end -- ignore user-set breakpoints
 armors[ECX] = readFloat(ECX+0x60) -- store armor in table
 debug_continueFromBreakpoint(co_run) -- continue execution
 return 1 -- let CE know we handled breakpoint, no need to update debugger form
end

openProcess("SpazGame.exe")
debugProcess()
debug_setBreakpoint(0x00406002)

debug_setBreakpoint()

アドレスにブレークポイントを追加します。オプションのパラメータとしてはサイズとタイプがあります。
  • size:アドレスから数えたブレークまでのバイト数(デフォルトで1, bptExeccuteの場合使用されない)
  • type:ブレークポイントの種類(デフォルトではbptExecute)
    • bptExecute: 命令ポインタEIPが指定した領域内にあるときにブレークする
    • bptAccess:指定した領域内のメモリがアクセスされたときにブレークする
    • bptWrite:指定した領域内のメモリに書き込みがあったときにブレークする
debuggertypedefinitions.pasに定義されているタイプ
type
TContinueOption = (co_run=0, co_stepinto=1, co_stepover=2, co_runtill=3);

type
TBreakpointTrigger = (bptExecute=0, bptAccess=1, bptWrite=2);
最終更新:2014年07月10日 15:19