【发布时间】:2011-04-17 11:46:47
【问题描述】:
我正在使用 CreateProcess(标志 NORMAL_PRIORITY_CLASS + DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS)启动一个 Explorer.exe 实例,然后我正在这样做:
过程 FakeDebugProcess;
变量
wDebugEvent:DEBUG_EVENT;
开始
填充字符(wDebugEvent,sizeof(wDebugEvent),0);
重复
如果 WaitForDebugEvent(wDebugEvent, INFINITE)
然后
开始
如果 wDebugEvent.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT
然后打破;
ContinueDebugEvent(wDebugEvent.dwProcessId, wDebugEvent.dwThreadId, DBG_CONTINUE);
结尾;
直到假;
结束;
几乎一切正常,除了我从似乎是“C:\Windows\System32\rpcrt4.dll”的地方得到了很多 EXCEPTION_DEBUG_EVENTs
(附加详细信息:EXCEPTION_ACCESS_VIOLATION)
77ea3c00 sub_77ea3c00: ;函数入口点 77ea3c00 >>mov [ecx+4], eax 77ea3c03 movsx eax, bx 77ea3c06 cdq 77ea3c07 子 eax, edx 77ea3c09 sar eax, 1 77ea3c0b mov [ecx], 斧头 77ea3c0e xor eax, eax 77ea3c10 流行音乐 77ea3c11 流行音乐 77ea3c12 流行 ebx 77ea3c13 弹出 ebp 77ea3c14 ret 8我做错了什么?我该如何解决?
顺便说一句,我正在使用 Delphi 7。
【问题讨论】:
-
所以,似乎更好的方法是:
-
如果 wDebugEvent.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT 则开始,然后中断; ContinueDebugEvent(wDebugEvent.dwProcessId, wDebugEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);结尾;根据MSDN:函数继续异常处理。如果这是第一次机会异常事件,则使用结构化异常处理程序的搜索和调度逻辑;否则,该过程终止。对于任何其他调试事件,此标志只是继续线程。
-
Explorer.exe 现在正因“应用程序未能正确初始化 (0x80000003)”而死,所以仍未解决。
标签: c++ delphi debugging winapi