-
-
[求助]调试寄存器的问题
-
发表于: 2008-3-7 21:46 3592
-
怎么设置多个断点了呀,我感觉我都写对了呀,在DR1,DR2,上设置了断点, DR7让它们生效 ,然后被调试程序执行到断点位置就生成EXCEPTION_SINGLE_STEP消息,可是为什么还是不行呀???两个断点应该只生成两个消息了吧,可是为什么会一直弹出呢??
case EXCEPTION_SINGLE_STEP:
{
++dwSSCnt ;
if (dwSSCnt == 1)
{
::GetThreadContext(pi.hThread, &Regs) ;
Regs.Dr0 = Regs.Dr7 = 0 ;
::SetThreadContext(pi.hThread, &Regs) ;
::ReadProcessMemory(pi.hProcess, (LPCVOID)(Regs.Esp+4), &dwAddrProc, sizeof(DWORD), NULL) ;
::ReadProcessMemory(pi.hProcess, (LPCVOID)dwAddrProc, &Regs, sizeof(CONTEXT), NULL) ;
Regs.Dr0 = dwBreakAddr ;
Regs.Dr1 = dwBreakAddr2 ;
Regs.Dr7 = 0x105 ;
Regs.EFlags |= 0x0 ;
::WriteProcessMemory(pi.hProcess, (LPVOID)dwAddrProc, &Regs, sizeof(CONTEXT), NULL) ;
dwState = DBG_CONTINUE ;
}
else
{
::GetThreadContext(pi.hThread, &Regs) ;
dwState = DBG_CONTINUE ;
char key[256];
char key2[256];
sprintf(key2, "你的License是:%d", Regs.Eax);
MessageBox(NULL, key2, "序列号",0);
}
case EXCEPTION_SINGLE_STEP:
{
++dwSSCnt ;
if (dwSSCnt == 1)
{
::GetThreadContext(pi.hThread, &Regs) ;
Regs.Dr0 = Regs.Dr7 = 0 ;
::SetThreadContext(pi.hThread, &Regs) ;
::ReadProcessMemory(pi.hProcess, (LPCVOID)(Regs.Esp+4), &dwAddrProc, sizeof(DWORD), NULL) ;
::ReadProcessMemory(pi.hProcess, (LPCVOID)dwAddrProc, &Regs, sizeof(CONTEXT), NULL) ;
Regs.Dr0 = dwBreakAddr ;
Regs.Dr1 = dwBreakAddr2 ;
Regs.Dr7 = 0x105 ;
Regs.EFlags |= 0x0 ;
::WriteProcessMemory(pi.hProcess, (LPVOID)dwAddrProc, &Regs, sizeof(CONTEXT), NULL) ;
dwState = DBG_CONTINUE ;
}
else
{
::GetThreadContext(pi.hThread, &Regs) ;
dwState = DBG_CONTINUE ;
char key[256];
char key2[256];
sprintf(key2, "你的License是:%d", Regs.Eax);
MessageBox(NULL, key2, "序列号",0);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]硬件断点的问题 3224
- [求助]如何修改第三方程序的类名? 3132
- [求助]如何远程卸载DLL? 4557
- [求助]debugactiveprocess 可以同时调试两个进程吗? 3677
- [求助]如何准确的下断? 3116
赞赏
雪币:
留言: