-
-
[求助]请开发调试器的高手,帮看一下
-
发表于:
2010-8-4 17:16
5191
-
在开发调试器中实现软断.
一个 0xcc
一个WaitForDebugEvent函数 即可
但要实现硬断
我又为此从脑子里“减肥”减了数十斤
请高手看一下,解一下谢谢
代码运行后..原int3可中断, 硬断不下.
代码从
unsigned char cOldByte;
unsigned char dwINT3code=0XCC;
ReadProcessMemory(hProcess,(LPVOID)0x77c1741e,&cOldByte,1,NULL);
WriteProcessMemory(hProcess, (LPVOID)0x77c1741e,&dwINT3code, 1,NULL);
...............
while(WaitForDebugEvent(&stDe,INFINITE))
{...........
case EXCEPTION_DEBUG_EVENT:
stThreadContext.ContextFlags = CONTEXT_CONTROL;
GetThreadContext(hThread,&stThreadContext);
hThread= SOpenThread(THREAD_ALL_ACCESS, TRUE, stDe.dwThreadId);
SuspendThread(hThread);
stThreadContext.Dr7 = stThreadContext.Dr7 | 0X301 ; //ONEDR0EVALUE
stThreadContext.Dr0 = 0x77c1741e;
SetThreadContext(hThread,&stThreadContext);//漏悼的
break;
补充:
我曾看过5个开源的小调试器;查过MSDN.但始终不明白怎么实现硬断 .
我觉得:
1,通过获取调试线程--2,挂起调试线程(为了安全)--3,设置调试线程Dr0~Dr3值地址---4,恢复调试线程
我的不明点:
1,怎么编写设置Dr0~Dr3的中断地址,数值类型(1,BYTE 2,DWORD 3,...),断点类型(1,内存读,2,内存写,3,exec) ??
恳求高手看一眼.打一字.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!