0:000> u 7732378f
KERNELBASE!IsDebuggerPresent:
7732378f 64a118000000 mov eax,dword ptr fs:[00000018h]
77323795 8b4030 mov eax,dword ptr [eax+30h]
77323798 0fb64002 movzx eax,byte ptr [eax+2]
7732379c c3 ret
简单的script
r @$t0 = kernelBase!IsDebuggerPresent; eb @$t0+0x9 31 c0 90 90
强制把原代码改成xor eax, eax; nop; nop
注意在xp下,使用kernel32
调试 kernel32!SetUnhandledExceptionFilter
这个函数并不长. 它会调用 IsDebugPortPresent(), 如果存在调试器, 则直接返回, 让调试器处理异常. 否则调用用户通过 SetUnhandledExceptionFilter() 注册的处理函数.
如果要调试自己的处理函数,可以在 IsDebugPortPresent() 函数返回之后, 将 eax 置 0.