监视函数是否被设置 INT3 断点

OD中的Int3断点的主要功能是:在需要下断点的执行代码处将原来的代码改成0xCC,程序执行到此处后会报一个Int3异常,由OD捕获并处理。当要执行该行代码时,将原来的代码改回来并执行,然后再恢复断点,这样就不会影响程序的正常运行了。

#include "stdafx.h" #include #include using namespace std; BOOL CheckBreakPoint(); void MyMessage(); HWND hwnd; int main(int argc, char* argv[]) { hwnd=GetDesktopWindow(); //Messag if(CheckBreakPoint()) { cout<<"MessageBox 被设置了断点"; } else { cout<<"MessageBox 没有被设置断点"; } MyMessage(); return 0; } BOOL CheckBreakPoint() { FARPROC uaddr; BYTE Mark=0; (FARPROC&)uaddr=GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA"); Mark=*(BYTE*)uaddr; if(Mark==0xCC) return TRUE; else return FALSE; } void MyMessage() { MessageBox(hwnd,TEXT("ASD"),TEXT("ASDF"),0); }

 

在 messageboxa 的第一条指令(mov edi,edi)出 F2

你可能感兴趣的:(ASM)