首页
社区
课程
招聘
[求助]学习WaitForDebugEvent系列遇到些问题,求教
发表于: 2010-11-4 12:05 7631

[求助]学习WaitForDebugEvent系列遇到些问题,求教

2010-11-4 12:05
7631
无壳进程用DEBUG_ONLY_THIS_PROCESS参数创建以后,进入WaitForDebugEvent循环,现在想在某一个断点事件以后,像VC那样分离调试状态,是调用哪个API?搜了半天没搜到,是否要先ContinueDebugEvent以后再分离?如果分离的瞬间有调试事件生成,是否会导致被调试进程挂起呢?
另外还有一个问题,对于EXCEPTION_DEBUG_EVENT类型的事件,ContinueDebugEvent的时候参数要填什么才可以使异常传递给程序解决?是DBG_EXCEPTION_NOT_HANDLED吗?
为什么下面这种写法连notepad都不能调试运行起来?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DEBUG_EVENT devent;
while(1)           
{  
    if (WaitForDebugEvent(&devent, INFINITE))       {  
        switch (devent.dwDebugEventCode)  
        {  
        case EXCEPTION_DEBUG_EVENT:                       
            ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_EXCEPTION_NOT_HANDLED);
            break;
        case EXIT_PROCESS_DEBUG_EVENT:
            ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_CONTINUE);
            __asm int 3
            break;
        default:
            ContinueDebugEvent(devent.dwProcessId , devent.dwThreadId , DBG_CONTINUE); 
            break;
        }
    }  
    else 
    {  
        // 其他一些操作
        //break;
    }  
}

很快就会运行到int 3,求教,谢谢!

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费
支持
分享
最新回复 (2)
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
测试出来了,分离是要调用DebugActiveProcessStop。
另外对于EXCEPTION_DEBUG_EVENT,如果ExceptionCode是EXCEPTION_BREAKPOINT的话,是要传递DBG_CONTINUE的(进程创建出来就会有一次EXCEPTION_BREAKPOINT断下,并非自己改int3直接传DBG_CONTINUE),其他类型的异常传递给程序运行的话是DBG_EXCEPTION_NOT_HANDLED。
这样就搞定了。。。
2010-11-4 13:44
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
再次遇到一个问题,如果进程是用DebugActiveProcess附加过去的,不知道为什么EXCEPTION_DEBUG_EVENT会收到0xC0000142也就是STATUS_DLL_INIT_FAILED,然后进程就挂了。

---------------------------------------------------------------------

如果被调试进程是用CREATE_SUSPENDED创建的,并且没有被ResumeThread过,用DebugActiveProcess就会收到0xC0000142的异常,否则就可以正常附加。

---------------------------------------------------------------------

试了下CREATE_SUSPENDED的进程用OD附加,调试了下,发现IAT表加载的有问题,比如GetModuleHandleA的地址错误地偏移了0x10个字节,某些导入函数地址正确而某些则错误,根本就不可能正常运行起来。可能CREATE_SUSPENDED的进程在没有ResumeThread过的情况下,本身就是不可能成功附加运行的。
2010-11-4 22:58
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册