注册

CpuDbg x96

查看: 3100|回复: 0
收起左侧

[OllyDbg] 硬件断点无效的问题

[复制链接]
发表于 2022-4-24 13:00:06 | 显示全部楼层 |阅读模式
[C++] 纯文本查看 复制代码
DWORD WINAPI ThreadProc(PVOID lpParameter)
{
        PCHAR lpMsg = (PCHAR)lpParameter;

        while(TRUE)
        {
                OutputDebugString(lpMsg);
                Sleep(2000);
        }

        return 0;
}

void CMfcDlg::OnThread() 
{
        CreateThread(NULL, 0, ThreadProc, "11111", 0, NULL);
}

void CMfcDlg::OnThread2() 
{
        CreateThread(NULL, 0, ThreadProc, "22222", 0, NULL);
}

void CMfcDlg::OnThread3() 
{
        CreateThread(NULL, 0, ThreadProc, "33333", 0, NULL);
}

void CMfcDlg::OnThread4() 
{
        CreateThread(NULL, 0, ThreadProc, "44444", 0, NULL);
}

void CMfcDlg::OnThread5() 
{
        CreateThread(NULL, 0, ThreadProc, "55555", 0, NULL);
}


用的是上面的测试代码, 用了两种方法测试.

方法1:
载入目标程序后, 中断在OEP处, 然后对 ThreadProc 回调下硬件断点,  
F9程序运行后, 依次按下每一个按钮. 看看每个thread是否会硬件中断下来.
(这里主要测验调试器是否支持多线程,以及刷新 DR  context. 这个od1.x做不到)
方法2:
载入后直接F9运行, 运行后, 依次按下每一个按钮.再在ThreadProc 下硬件断点.
(这里主要测验程序运行后,调试器是否能刷新多线程 context. 这个od1.x做不到)

(注意区别, 上面的是暂停在OEP处时,下的硬断, 下面个是运行时下的硬断.这样测试才能全面测试硬件断点准确无误. )

最后看看每个thread是否会硬件中断下来.

其中测试了 yzdbg x64dbg ollydbg2.x 两种方法测试了都正常. 只有 ollydbg1.x 有问题.
方法1中说明在接收到 CREATE_THREAD_DEBUG_EVENT  事件后, od1.x并没有给dr寄存器重新设置硬件断点.
方法2中有都效果,能正常中断, 只有 od1.x 每个线程都F9一次后,程序就非正常结束了.


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-12-21 18:33 , Processed in 0.062500 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

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