"Peter Oberndorfer" <[EMAIL PROTECTED]> 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.