Rebase against e83f427a65726bfdefd2712a96f228e720c8b274

This commit is contained in:
Alistair Leslie-Hughes
2019-09-19 08:53:36 +10:00
parent 6bee4b6e76
commit 692d7d43e0
4 changed files with 42 additions and 32 deletions

View File

@@ -1,4 +1,4 @@
From 2c63306841e4cca19e722282efab78af21d3f5eb Mon Sep 17 00:00:00 2001
From 0b9ca95d49019b20fd8088c64217f524a9fe476f Mon Sep 17 00:00:00 2001
From: Andrew Wesie <awesie@gmail.com>
Date: Fri, 27 Jul 2018 01:26:56 -0500
Subject: [PATCH] Use NtContinue to continue execution after exceptions.
@@ -14,9 +14,9 @@ unlikely that it has the correct behavior if called by an external caller.
The __syscall_NtContinue wrapper is used so that it can be hooked by a
third-party.
---
dlls/ntdll/exception.c | 9 +++++++--
dlls/ntdll/signal_i386.c | 3 ++-
2 files changed, 9 insertions(+), 3 deletions(-)
dlls/ntdll/exception.c | 9 +++++++--
dlls/ntdll/signal_i386.c | 10 ++++++++--
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/exception.c b/dlls/ntdll/exception.c
index 3b85f1efa04..411d2bf5b8f 100644
@@ -39,10 +39,10 @@ index 3b85f1efa04..411d2bf5b8f 100644
/*************************************************************
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 50152370b49..59255ed7493 100644
index 87ffd62c8c5..6be23f850ba 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -2589,6 +2589,7 @@ __ASM_STDCALL_FUNC( RtlUnwind, 16,
@@ -2546,19 +2546,25 @@ __ASM_STDCALL_FUNC( RtlUnwind, 16,
__ASM_CFI(".cfi_same_value %ebp\n\t")
"ret $16" ) /* actually never returns */
@@ -50,15 +50,26 @@ index 50152370b49..59255ed7493 100644
/*******************************************************************
* NtRaiseException (NTDLL.@)
@@ -2596,7 +2597,7 @@ __ASM_STDCALL_FUNC( RtlUnwind, 16,
*/
NTSTATUS WINAPI NtRaiseException( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL first_chance )
{
NTSTATUS status = raise_exception( rec, context, first_chance );
- if (status == STATUS_SUCCESS) NtSetContextThread( GetCurrentThread(), context );
+ if (status == STATUS_SUCCESS) __syscall_NtContinue(context, FALSE);
return status;
+ NTSTATUS status;
+
if (first_chance)
{
- NTSTATUS status = send_debug_event( rec, TRUE, context );
+ status = send_debug_event( rec, TRUE, context );
if (status == DBG_CONTINUE || status == DBG_EXCEPTION_HANDLED)
NtSetContextThread( GetCurrentThread(), context );
}
- return raise_exception( rec, context, first_chance );
+ status = raise_exception( rec, context, first_chance );
+ if (status == STATUS_SUCCESS)
+ __syscall_NtContinue(context, FALSE);
+ return status;
}
--
2.17.1