[PATCH 3/3] ntdll: fix up instruction pointer in context
insideraise_exception
Dmitry Timoshkov
dmitry at codeweavers.com
Mon Feb 19 02:37:05 CST 2007
"Peter Oberndorfer" <kumbayo84 at arcor.de> wrote:
> I'm not fully sure if the fixup also happens for other architectures
> (i guess not)
> so this patch is more a RFC
> @@ -336,6 +336,10 @@ static NTSTATUS raise_exception( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL f
> if (status == DBG_CONTINUE || status == DBG_EXCEPTION_HANDLED)
> return STATUS_SUCCESS;
>
> + /* fix up instruction pointer in context for EXCEPTION_BREAKPOINT */
> + if (rec->ExceptionCode == EXCEPTION_BREAKPOINT)
> + GET_IP(context) = (DWORD_PTR)GET_IP(context) - 1;
Gary Nebbett's book "Windows Nt/2000 Native API Reference" in the section C
"Exceptions and Debugging" provides a pseudocode for KiDispatchException
(page 439, Example C.1), and it does exactly the same thing as the patch
above. *But* it does it as a very first thing after getting the context and
before sending the debugger event.
--
Dmitry.
More information about the wine-devel
mailing list