c++ - 使用零除法异常检测 C++ 中的调试器

标签 c++ debugging inline-assembly

我发现用 c++ 编写的函数可以在我执行时检测调试器

xor eax, eax
div eax

但问题是当附加调试器时,进程在到达 div eax 后崩溃。我将该内联 asm 放入 __try 和 __except 部分,但在到达指令 div eax 过程后就卡住了。完整代码:

#include "windows.h"
#include <iostream>

using namespace std;

LONG WINAPI UnhandledExcepFilter(PEXCEPTION_POINTERS pExcepPointers) {
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)pExcepPointers->ContextRecord->Eax);
    pExcepPointers->ContextRecord->Eip += 2;
    return EXCEPTION_CONTINUE_EXECUTION;
}

int main() {
     SetUnhandledExceptionFilter(UnhandledExcepFilter);

    __try {
        __asm {
            xor eax, eax
            div eax
        }
    }
    __except (EXCEPTION_INT_DIVIDE_BY_ZERO) {
        cout << "DEBUGGER NOT FOUND" << endl;
    }

return NULL;
}

我只需要默默地检测调试器。 感谢您的帮助。

最佳答案

鉴于您正在使用 "windows.h",您可以将其简化为 IsDebuggerPresent , 和/或 DebugBreak

关于c++ - 使用零除法异常检测 C++ 中的调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605121/

相关文章:

c++ - 使用内嵌 asm 编写一个带有 2 个比较的 for 循环

c++ - 如何在 Haxe 中使用 C/C++ 库(如 NCurses)

c++ - 结构的Printf? (C/C++, VC2008)

c++ - 指向父类成员方法的指针

c++ - Boost 多索引有序迭代器分配

javascript - 如何保持 Javascript 开发变量的观察点?

mysql - 如何在不中断应用程序控制流的情况下调试 MySql 存储过程

c - 使 GDB 在调用时打印函数的控制流

gcc - 为什么Seabios无法使用-fno-inline进行编译

assembly - 包含 %0 的 asm 代码,这是什么意思?