- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
我正在处理一个反调试应用程序,它禁止将 EXCEPTION_DEBUG_EVENT 传递给我的调试器,而是执行其 SEH 和 UnhandledExceptionFilters。 我尝试了 3 种不同
我正在使用 CreateProcess(标记 NORMAL_PRIORITY_CLASS + DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS)启动一个 Explorer
我是一名优秀的程序员,十分优秀!