od(2)断点检测
你得知道有时候是不能下断点的,因为会被发现。
原理:当设置断点后,对应位置的机器码(第一个字节)被替换成0XCC(对应的汇编指令为int3),当cpu执行到此位置,会触发一个异常。
缺点:容易被检测到。
(示例代码来自网络)
1 FARPROC Uaddr; 2 BYTE Mark = 0; 3 (FARPROC&)Uaddr=GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA"); 4 Mark = *((BYTE*)Uaddr)//取MessageBoxA第一个字节 5 if(Mark==0xCC) 6 { 7 return TRUE //发现断点 8 }