我发现用 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/