gpt4 book ai didi

c++ - 我在使用 WaitForDebugEvent EXCEPTION_DEBUG_EVENT 时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:51 24 4
gpt4 key购买 nike

我正在使用 CreateProcess(标记 NORMAL_PRIORITY_CLASS + DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS)启动一个 Explorer.exe 实例,然后我这样做:

procedure FakeDebugProcess; var   wDebugEvent : DEBUG_EVENT; begin   fillchar( wDebugEvent, sizeof( wDebugEvent ), 0 );   repeat     if WaitForDebugEvent( wDebugEvent, INFINITE )       then         begin           if wDebugEvent.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT             then break;           ContinueDebugEvent( wDebugEvent.dwProcessId, wDebugEvent.dwThreadId, DBG_CONTINUE );         end;  until false; end;

几乎一切正常,除了我从“C:\Windows\System32\rpcrt4.dll”中收到大量 EXCEPTION_DEBUG_EVENT 消息

(其他详细信息:EXCEPTION_ACCESS_VIOLATION)

77ea3c00 sub_77ea3c00:                    ; function entry point77ea3c00 >>mov     [ecx+4], eax77ea3c03   movsx   eax, bx77ea3c06   cdq77ea3c07   sub     eax, edx77ea3c09   sar     eax, 177ea3c0b   mov     [ecx], ax77ea3c0e   xor     eax, eax77ea3c10   pop     edi77ea3c11   pop     esi77ea3c12   pop     ebx77ea3c13   pop     ebp77ea3c14   ret     8

我做错了什么?我该如何解决?

顺便说一句,我正在使用 Delphi 7。

最佳答案

您的代码很好,使用其他调试器(如 ollydbg)进行测试,rpcrt4.dll 仍然报告附加到某些应用程序时出现异常。解决这个问题的唯一方法是定义过滤器(ollydbg 允许用户做什么),基于异常代码,然后基于模块。因此,如果您收到 0xC0000005(EXCEPTION_ACCESS_VIOLATION),您将检查:EIP >= (UINT_PTR)GetModuleHandle("rpcrt.dll") && EIP <= (UINT_PTR)GetModuleHandle("rpcrt.dll") + getModuleSize("rpcrt.dll") (当然 getModuleSize 是一个自定义函数,用于从 PE 获取模块的虚拟化大小,而 UINT_PTR 是一种大到足以在目标系统上保存指针的类型),您忽略它,否则处理事件,尽管可能需要 Hook KiDispatchUserException(这应该是正确的,否则检查 NTInternals)

关于c++ - 我在使用 WaitForDebugEvent EXCEPTION_DEBUG_EVENT 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com