首页
社区
课程
招聘
[旧帖] [邀请码已发][原创]mfc成员函数使ollydbg断点无效 0.00雪花
发表于: 2009-9-17 21:18 1241

[旧帖] [邀请码已发][原创]mfc成员函数使ollydbg断点无效 0.00雪花

2009-9-17 21:18
1241
刚来看雪不久,对破解一点也不了解。
买了本看雪的《加密与解密》,进行学习。
     在看到第二章学习使用ollydbg时,发现自己用mfc编的traceme程序无法被ollydbg捕捉到getdlgitemtext函数,查看程序源码,确实是用了getdlgitemtext函数,只是我用的是cwnd的成员函数,难道是这个原因?应该不会啊,成员函数肯定会去调用的getdlgitemtext这个api函数啊,效果应该一样啊,为了验证,我把cwnd的成员函数替换为全局的api函数,结果ollydbg能捕捉到这个函数了,这就奇了,难道是cwnd的成员函数没有调用全局的getdlgitemtext?
转到wincore.cpp查看cwnd成员函数的定义,发现了这样的定义代码

int CWnd::GetDlgItemText(int nID, CString& rString) const
{
        ASSERT(::IsWindow(m_hWnd));
        rString = _T("");    // empty without deallocating

#ifndef _AFX_NO_OCC_SUPPORT
        if (m_pCtrlCont == NULL)
        {
#endif
                HWND hWnd = ::GetDlgItem(m_hWnd, nID);
                if (hWnd != NULL)
                {
                        int nLen = ::GetWindowTextLength(hWnd);
                        ::GetWindowText(hWnd, rString.GetBufferSetLength(nLen), nLen+1);
                        rString.ReleaseBuffer();
                }

#ifndef _AFX_NO_OCC_SUPPORT
        }
        else
        {
                CWnd* pWnd = GetDlgItem(nID);
                if (pWnd != NULL)
                        pWnd->GetWindowText(rString);
        }
#endif

        return (int)rString.GetLength();
}

很明显了吧,确实没有调用getdlgitemtext这个api函数,而是用了GetDlgItem+GetWindowText这两个函数(注:cwnd::getdlgitemtext有两个重载函数,一个即上面所列的函数,另一个调用了getdlgitemtext这个api函数,而我做程序时用了第一个)

希望我的帖子能对和我一样的初学者起到一个借鉴作用

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//