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