跳转至

检查硬件断点

调试器还可以用处理器的调试寄存器设置断点;这些称为硬件断点。调试器可以通过把指令地址写入四个调试寄存器之一来在指令上设置硬件断点。

调试寄存器上的地址被执行时,调试器会收到通知。要检测硬件断点(从而检测调试器的存在),你可以像这样检查四个调试寄存器中的任何一个是否有非零值:

bool HasHardwareBreakpoints() {
    CONTEXT ctx = {0};
    ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
    auto hThread = GetCurrentThread();
    if(GetThreadContext(hThread, &ctx) == 0)
        return false;
ctx.Dr2 != 0 || ctx.Dr3 != 0);
}