-
-
[求助]调试寄存器的问题
-
发表于: 2008-3-7 21:46 3472
-
怎么设置多个断点了呀,我感觉我都写对了呀,在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);
}
赞赏
他的文章
- [求助]硬件断点的问题 3055
- [求助]如何修改第三方程序的类名? 2895
- [求助]如何远程卸载DLL? 4314
- [求助]debugactiveprocess 可以同时调试两个进程吗? 3498
- [求助]如何准确的下断? 2949
看原图
赞赏
雪币:
留言: