-
-
[求助]关于调试原理,遇到问题求教。
-
发表于:
2012-6-18 21:50
5271
-
附加调试:
r3 调试器通过DebugActiveProcess 调试进程,NtDebugActiveProcess 返回成功后 调用DebugBreakProcess创建远程线程在被调试进程创造一个int 3 断点,这时候调试器会断下。
(不是针对游戏,没有任何杀毒软件,等等)
自己实现调试时,r3 DebugActiveProcess 后 调用DebugBreakProcess创建远程线 会造成被调试进程和调试进程全部卡死.
windbg 跟踪发现,当创建新线程,也就是 DebugBreakProcess 创建的线程,通过DbgkCreateThread发送 DbgkpSendApiMessage 线程创建消息后,执行到DbgkpQueueMessage 会卡死在下面
KeWaitForSingleObject(&DebugEvent->ContinueEvent,
Executive,
KernelMode,
FALSE,
NULL);
搜索了一下,DebugEvent->ContinueEvent 被设置后,只有调用 DebugContinue 后才会重新设置。
问题就在这里, r3 调用DebugBreakProcess 后函数还没有返回,调试器还没有进入事件循环,导致DebugEvent->ContinueEvent 一直不被重置,进程卡死。
DebugBreakProcess 里面只是创建一个线程,应该立即返回的,怎么会导致卡死,请指教。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!