使用预取队列的反debugging不能用于我的cpu

为什么这段代码使我能够检测debugging器?

上面的链接告诉我使用预取队列的方式来反debugging,然后我试着用下面的代码来testing,但是我失败了。 任何人都可以帮我指出,如果我的代码是错误的。 我的CPU是Intel(R)Core(TM)i7-2630QM 2.00GHz。 非常感谢

ML :D:\ Programs \ masm32 \ Bin \ ML.EXE / c / coff / Cp / nologo / I“D:\ Programs \ masm32 \ Include”“AntiDebug.asm”

Link :D:\ Programs \ masm32 \ Bin \ LINK.EXE /SECTION:.text,RWE / SUBSYSTEM:WINDOWS / RELEASE /VERSION:4.0 / LIBPATH:“D:\ Programs \ masm32 \ Lib”/ OUT:“AntiDebug。 exe“”AntiDebug.obj“

它总是执行debugging标签,不pipe我是否在debugging,也不会执行'jmp normal'。

.386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include windows.inc include kernel32.inc include user32.inc includelib kernel32.lib includelib user32.lib .data szDebug db 'Hey, you are debugging!!!',0 szError db 'Error',0 szNormal db 'You are running it without debugging',0 szPrompt db 'Prompt',0 .code start: call IsDebug debug: invoke MessageBox, NULL, addr szDebug, addr szError, MB_OK invoke ExitProcess, -1 normal: invoke MessageBox, NULL, addr szNormal, addr szPrompt, MB_OK invoke ExitProcess, 0 IsDebug: mov al, 0c3h mov edi, offset IsDebug mov cx, 20h rep stosb jmp normal end start 

我不知道你的isdebug proc在做什么。

这里是我的代码,它在我的电脑上工作正常。

 .386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include c:\masm32\include\windows.inc include c:\masm32\include\kernel32.inc include c:\masm32\include\user32.inc includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\user32.lib .data szDebug db 'Hey, you are debugging!!!',0 szError db 'Error',0 szNormal db 'You are running it without debugging',0 szPrompt db 'Prompt',0 .code start: call IsDebug debug: invoke MessageBox, NULL, addr szDebug, addr szError, MB_OK invoke ExitProcess, -1 normal: invoke MessageBox, NULL, addr szNormal, addr szPrompt, MB_OK invoke ExitProcess, 0 IsDebug: invoke IsDebuggerPresent test eax,eax je normal ret end start