IDA PRO:如何在 EAX 寄存器值上设置条件断点?

逆向工程 艾达
2021-07-02 18:35:20

当 EAX 记录 == 1 时,我想要一个断点。这是执行此操作的 IDC 脚本,但速度非常慢。有没有人有更快的脚本或插件来做到这一点?

#include <idc.idc>

static main()
{
    for(;;)
    {
        StepInto();
         
        if (GetDebuggerEvent(WFNE_SUSP, -1) == STEP)
        {
            if (GetRegValue("EAX") == 0) 
            {
                msg("EAX:%08Xh\n", eax);
                break;
            }
        }        
    }
    PauseProcess();
}
1个回答

您所要求的与 x86 上的调试方式不兼容。它的调试设施有限;您可以在对多达四个内存位置的读或写访问时设置硬件断点,并且可以在执行特定地址时设置软件或硬件断点。x86 调试接口中没有任何内容允许您在寄存器获得特定值时告诉处理器停止执行。您使用单步执行的操作最接近 x86 调试接口。如果您想要更好的性能,请考虑为动态二进制检测 (DBI) 框架(例如 Intel PIN 或 DynamoRIO)编写插件。