飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2808|回复: 0

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

[复制链接]
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-6-5 11:15:04 | 显示全部楼层 |阅读模式
    #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捕获并处理。当要执行该行代码时,将原来的代码改回来并执行,然后再恢复断点,这样就不会影响程序的正常运行了。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表