ntdll: Prevent page faults from ATL thunk check to reach debuggers

Michael Karcher wine at mkarcher.dialup.fu-berlin.de
Sat Jul 25 13:04:07 CDT 2009


send_debug_event will not send the "first chance exception" message (or
any other) when Peb->BeingDebugged is zero.

---
 dlls/ntdll/signal_i386.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index d0e0172..90c2d0a 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -1466,10 +1466,12 @@ struct atl_thunk
 static BOOL check_atl_thunk( EXCEPTION_RECORD *rec, CONTEXT *context )
 {
     const struct atl_thunk *thunk = (const struct atl_thunk *)rec->ExceptionInformation[1];
+    int BeingDebugged = NtCurrentTeb()->Peb->BeingDebugged;
     BOOL ret = FALSE;
 
     __TRY
     {
+        NtCurrentTeb()->Peb->BeingDebugged = 0;
         if (thunk->movl == 0x042444c7 && thunk->jmp == 0xe9)
         {
             *((DWORD *)context->Esp + 1) = thunk->this;
@@ -1481,9 +1483,11 @@ static BOOL check_atl_thunk( EXCEPTION_RECORD *rec, CONTEXT *context )
     }
     __EXCEPT_PAGE_FAULT
     {
+        NtCurrentTeb()->Peb->BeingDebugged = BeingDebugged;
         return FALSE;
     }
     __ENDTRY
+    NtCurrentTeb()->Peb->BeingDebugged = BeingDebugged;
     return ret;
 }
 
-- 
1.6.3.3




More information about the wine-patches mailing list