ntdll: Program could modify Dr* registers in segv_handler too.
Vitaliy Margolen
wine-patch at kievinfo.com
Sat Dec 10 15:29:49 CST 2005
ChangeLog:
ntdll: Program could modify Dr* registers in segv_handler too.
dlls/ntdll/signal_i386.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
-------------- next part --------------
16282d82f33f22646904900e73f1aebb972f795c
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index ca42568..b2628bb 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -914,6 +914,8 @@ static inline DWORD get_fpu_code( const
*/
static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context )
{
+ DWORD dr0, dr1, dr2, dr3, dr6, dr7;
+
switch(rec->ExceptionCode)
{
case EXCEPTION_ACCESS_VIOLATION:
@@ -933,7 +935,23 @@ static void WINAPI raise_segv_exception(
}
break;
}
+
+ dr0 = context->Dr0;
+ dr1 = context->Dr1;
+ dr2 = context->Dr2;
+ dr3 = context->Dr3;
+ dr6 = context->Dr6;
+ dr7 = context->Dr7;
+
__regs_RtlRaiseException( rec, context );
+
+ if (dr0 != context->Dr0 || dr1 != context->Dr1 || dr2 != context->Dr2 ||
+ dr3 != context->Dr3 || dr6 != context->Dr6 || dr7 != context->Dr7)
+ {
+ /* the debug registers have changed, set the new values */
+ context->ContextFlags = CONTEXT_DEBUG_REGISTERS;
+ NtSetContextThread(GetCurrentThread(), context);
+ }
}
More information about the wine-patches
mailing list