// 初始化计数器
$counter = 0
// 获取地址并验证
$addr = kernel32.GetProcAddress
cmp $addr, 0
je Error_NoFunc
// 清除旧断点并设置新断点
bpc
bp $addr
log "断点已设置在 {x:$addr}"
// 启动程序
run
BreakpointHandler:
// 原子级递增计数器
$counter = $counter + 1
// x86架构使用eip寄存器获取调用者地址
$caller = eip
log "断点命中 {d:$counter} 次 | 调用者:{x:$caller}"
// 严格检查50次(使用jg防止溢出)
cmp $counter, 74
jg ForceStop // 超过50次强制停止
je Stop_After50
// 继续执行
run
jmp BreakpointHandler
Stop_After50:
log "[✓] 精确触发50次,正常停止"
sto
ret
ForceStop:
log "[!] 计数器异常(当前{d:$counter}次),强制停止!"
sto
ret
Error_NoFunc:
log "错误:未找到函数地址"
ret
脚本中的
// 超过50次强制停止
有必要吗? |