whypro 发表于 2010-6-5 11:15:04

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

#include "stdafx.h"   
#include <windows.h>   
#include <iostream>   
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);   
}


OD中的Int3断点的主要功能是:在需要下断点的执行代码处将原来的代码改成0xCC,程序执行到此处后会报一个Int3异常,由OD捕获并处理。当要执行该行代码时,将原来的代码改回来并执行,然后再恢复断点,这样就不会影响程序的正常运行了。
页: [1]
查看完整版本: 监视函数是否被设置 INT3 断点