首页
社区
课程
招聘
[求助]硬件中断制作loader出现问题
发表于: 2006-6-1 23:14 5335

[求助]硬件中断制作loader出现问题

2006-6-1 23:14
5335

debugee是我自己写的程序,看内存地址比较方便;
出现的问题是,debugee创建之后运行正常,但是debuger(就是我做的loader)没反应,断不下来,各位帮看一下代码哪里出错了。VC的代码

STARTUPINFO *si = new STARTUPINFO();
PROCESS_INFORMATION *pi = new PROCESS_INFORMATION();
DWORD dwAdr = 0x12FEFF;
si->cb = sizeof(STARTUPINFO);
CreateProcess("H:\\VC6PRO\\debugee\\Release\\debugee.exe" , NULL , NULL , NULL ,
        FALSE , CREATE_SUSPENDED | CREATE_DEFAULT_ERROR_MODE , NULL , NULL , si , pi);
DEBUG_EVENT *pDEvent = new DEBUG_EVENT();
CONTEXT *pDContext = new CONTEXT();
DWORD dwDParam;
DWORD dwNewAccess;
DWORD dwValue = 0;
ResumeThread(pi->hThread);
if (WaitForInputIdle(pi->hProcess , INFINITE) != 0)
{
        MessageBox("wait error");
}
if (!DebugActiveProcess(pi->dwProcessId))
{
        MessageBox("DebugActive error");
}
pDContext->ContextFlags = CONTEXT_ALL;
while (WaitForDebugEvent(pDEvent , INFINITE))
{
        dwDParam = DBG_CONTINUE;
        switch(pDEvent->dwDebugEventCode)
        {
        case CREATE_PROCESS_DEBUG_EVENT:
                GetThreadContext(pDEvent->u.CreateProcessInfo.hThread , pDContext);
                pDContext->Dr0 = dwAdr;
                pDContext->Dr6 = 0;
                pDContext->Dr7 = 0x101;
                pDContext->ContextFlags = CONTEXT_ALL;
                if (!SetThreadContext(pDEvent->u.CreateProcessInfo.hThread , pDContext))
                {
                        MessageBox("SetThreadContext error");
                }
                break;
        case EXCEPTION_DEBUG_EVENT:
                {
                        switch (pDEvent->u.Exception.ExceptionRecord.ExceptionCode)
                        {
                        case EXCEPTION_ACCESS_VIOLATION:
                                dwDParam = DBG_EXCEPTION_NOT_HANDLED;
                                break;
                        case EXCEPTION_SINGLE_STEP:
                                GetThreadContext(pi->hThread , pDContext);
                                if (pDContext->Dr6 & 1)
                                {
                                        MessageBox("break");
                                }
                                else
                                {
                                        dwDParam = DBG_EXCEPTION_NOT_HANDLED;
                                }
                                break;
                        }
                }
                break;
        case EXIT_PROCESS_DEBUG_EVENT:
                ContinueDebugEvent(pDEvent->dwProcessId , pDEvent->dwThreadId , dwDParam);
                break;
        default:
                break;
        }
        ContinueDebugEvent(pDEvent->dwProcessId , pDEvent->dwThreadId , dwDParam);
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 214
活跃值: (70)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
在switch语句块外有ContinueDebugEvent?为什么有二个?
2006-6-2 00:10
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
3
不清楚,我这是照着ttui的代码翻译的。。。
2006-6-2 12:44
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
4
召唤ttui
召唤justlovemm
请两位帮忙看看,我是参考你们的代码写的
2006-6-2 15:10
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
5
大家都帮忙看看啊
2006-6-2 18:19
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
6
。。。怎么都没人来看的
2006-6-3 12:34
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
pDContext->ContextFlags = CONTEXT_ALL;
改为
pDContext->ContextFlags = CONTEXT_DEBUG_REGISTERS;
试试,我上次是因为这个问题断不下来,不过我用的是CONTEXT_CONTROL。你看一下我的那个13楼的帖子,我已经忘了为什么不能用CONTEXT_FULL了。
2006-6-3 14:48
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
8
改成CONTEXT_DEBUG_REGISTERS也不行。
而且我发现,在你的代码中,GetThreadContext(pDEvent->u.CreateProcessInfo.hThread , pDContext);而ttui的代码中,GetThreadContext(pi->hThread , pDContext);我跟踪的时候发现这两个值并不相等。。。
2006-6-3 17:33
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
那可能还是2楼的说的对,你在switch外面还有一次ContinueDebugEvent,这样在switch里进行过ContinueDebugEvent的话,出了switch还要再进行一次,这就不对了。你把外面的那个ContinueDebugEvent移到swtich的default里试试。
2006-6-4 11:56
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
10
原来2楼说的是这意思啊,我没看明白,拜托下次给菜鸟讲解的时候一定要浅显。。。
这个原因看起来满有道理的,回去试试。
2006-6-10 18:41
0
游客
登录 | 注册 方可回帖
返回
//