"Peter Oberndorfer" kumbayo84@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.