首页
社区
课程
招聘
用DebugActiveProcess附加了进程后为何被附加进程就暂停运行了?
发表于: 2017-2-19 10:52 5168

用DebugActiveProcess附加了进程后为何被附加进程就暂停运行了?

2017-2-19 10:52
5168

困扰我一天了,昨天不能发帖,百度各种找没有相关介绍,我用DebugActiveProcess函数附加一个进程后,被附加进程就暂停运行了,书上说附加一个进程就相当于用DEBUG_ONLY_THIS_PROCESS创建一个新进程一样,我用ResumeThread函数都不能让被附加的进程继续运行起来,求大神帮忙解答下,万分感谢!


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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

After the system checks the process identifier and determines that a valid debugging attachment is being made, the function returns TRUE. Then the debugger is expected to wait for debugging events by using the WaitForDebugEvent function. The system suspends all threads in the process, and sends the debugger events that represents the current state of the process.


WaitForDebugEvent, ContinueDebugEvent

2017-2-19 12:08
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3



yuchengton

After the system checks the process identifier and determines that a valid debugging attachment is b ...
我把加密解密18.2.3里面的代码拿去跑,结果也是被调试进程始终被挂起....
2017-2-19 12:14
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
#include  <Windows.h>
#include  <iostream>
TCHAR  szName[]  =  TEXT("f://primer.exe");
int  main() 
{
       //加载被调试进程
       HANDLE  hProcess,  hThread;
       DWORD  threadID,  processID;
       DEBUG_EVENT  dEvent;
       STARTUPINFO  si;
       memset(&si,  0,  sizeof(STARTUPINFO));
       si.cb  =  sizeof(STARTUPINFO);
       si.dwFlags  =  STARTF_USESHOWWINDOW;
       si.wShowWindow  =  SW_SHOW;
       PROCESS_INFORMATION  pi;
       CreateProcess(NULL,  szName,  NULL,  NULL,NULL,DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS,  NULL,  NULL,  &si,  &pi);
       hProcess  =  pi.hProcess;
       hThread  =  pi.hThread;
       processID  =  pi.dwProcessId;
       threadID  =  pi.dwThreadId;
       //接收调试事件
       while  (WaitForDebugEvent(&dEvent,  INFINITE)) 
       {
               switch  (dEvent.dwDebugEventCode)
               {
               case  EXCEPTION_DEBUG_EVENT:
                       switch  (dEvent.u.Exception.ExceptionRecord.ExceptionCode)
                       {
                       case  EXCEPTION_BREAKPOINT:
                               MessageBoxA(NULL,  "INT  3",  "EXCEPTION",  0);
                               break;
                       case  EXCEPTION_SINGLE_STEP:
                               MessageBoxA(NULL,  "F7",  "EXCEPTION",  0);
                               break;
                       }
               }
               ContinueDebugEvent(processID,  threadID,  DBG_CONTINUE);
       }
       return  0;
}
这是我自己写的代码,运行之后被调试程序始终被挂起,而本程序也一直处于等待调试事件状态,求教
2017-2-19 12:18
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
困扰我一天了,一直没解决
2017-2-19 12:19
0
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ContinueDebugEvent(dEvent.dwProcessId,    dEvent.dwThreadId,    DBG_CONTINUE);
这样试试
不然多线程会出问题
2017-2-19 13:22
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7



yuchengton

ContinueDebugEvent(dEvent.dwProcessId, dEvent.dwThreadId, DBG_CONTINUE);
这样试试
不然多线程会出问题
6666+,真心感谢你,太激动了,困扰这么久的问题解决了,哈哈哈,多谢了
2017-2-19 13:31
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8



yuchengton

ContinueDebugEvent(dEvent.dwProcessId, dEvent.dwThreadId, DBG_CONTINUE);
这样试试
不然多线程会出问题
感激万分!!!感激万分!!!感激万分!!!重要的事情说三遍哈哈
2017-2-19 13:32
0
游客
登录 | 注册 方可回帖
返回
//