当寄存器设置为特定值时如何停止 IDA 调试器?

逆向工程 艾达 idapro插件 断点 登记
2021-06-30 12:59:40

我使用以下脚本将 IDA 设置为跟踪模式,并在 EAX 寄存器设置为给定值后立即停止:

#include <idc.idc>

static main()
{
    auto r_eip, code, eax;

    EnableTracing(TRACE_STEP, 1);

    for ( code = GetDebuggerEvent(WFNE_ANY|WFNE_CONT, -1); // resume
        code > 0;
        code = GetDebuggerEvent(WFNE_ANY, -1) )
    {                  
        r_eip = GetEventEa();

        eax = GetRegValue("EAX");
        Message("EAX:%08Xh\n", eax);

        if ( eax == 0x00000001 )
            break;
    }

    PauseProcess();
    EnableTracing(TRACE_STEP, 0);    
}

但是它不起作用:我收到以下错误消息:“变量'EAX'未定义

如果我eax = GetRegValue(...)在注释中添加一行,在运行中,但 eax 始终为零。

代码改编自这里:https : //www.hex-rays.com/products/ida/debugger/scriptable.shtml

1个回答

为此,您可以使用以下 IDC 脚本。每当 registereax包含 0时它就会停止。执行脚本时调试器必须正在运行。

#include <idc.idc>

static main()
{
    for(;;)
    {
        StepInto();
        if (GetDebuggerEvent(WFNE_SUSP, -1) == STEP)
        {
            if (eax == 0) 
            {
                break;
            }
        }        
    }
    PauseProcess();
}