You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.2 KiB
92 lines
2.2 KiB
//
|
|
// Created by TiborL 06/01/97
|
|
//
|
|
|
|
#ifdef WIN32_LEAN_AND_MEAN
|
|
#undef WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
|
|
#pragma warning(disable:4102 4700)
|
|
|
|
extern "C" {
|
|
#include <windows.h>
|
|
};
|
|
|
|
#include <mtdll.h>
|
|
|
|
#include <ehassert.h>
|
|
#include <ehdata.h>
|
|
#include <trnsctrl.h>
|
|
#include <eh.h>
|
|
#include <ehhooks.h>
|
|
|
|
#pragma hdrstop
|
|
|
|
extern "C" void _UnwindNestedFrames(
|
|
EHRegistrationNode *pFrame, // Unwind up to (but not including) this frame
|
|
EHExceptionRecord *pExcept, // The exception that initiated this unwind
|
|
CONTEXT *pContext // Context info for current exception
|
|
) {
|
|
void *pReturnPoint; // The address we want to return from RtlUnwind
|
|
CONTEXT LocalContext; // Create context for this routine to return from RtlUnwind
|
|
CONTEXT OriginalContext; // Restore pContext from this
|
|
CONTEXT ScratchContext; // Context record to pass to RtlUnwind2 to be used as scratch
|
|
|
|
//
|
|
// set up the return label
|
|
//
|
|
BASE:
|
|
_MoveContext(&OriginalContext,pContext);
|
|
RtlCaptureContext(&LocalContext);
|
|
_MoveContext(&ScratchContext,&LocalContext);
|
|
_SaveUnwindContext(&LocalContext);
|
|
RtlUnwind2((PVOID)*pFrame, pReturnPoint, (PEXCEPTION_RECORD)pExcept, NULL, &ScratchContext);
|
|
LABEL:
|
|
_MoveContext(pContext,&OriginalContext);
|
|
_SaveUnwindContext(0);
|
|
PER_FLAGS(pExcept) &= ~EXCEPTION_UNWINDING;
|
|
}
|
|
|
|
/*
|
|
;;++
|
|
;;
|
|
;;extern "C"
|
|
;;PVOID
|
|
;;__Cxx_ExecuteHandler (
|
|
;; ULONGLONG MemoryStack,
|
|
;; ULONGLONG BackingStore,
|
|
;; ULONGLONG Handler,
|
|
;; ULONGLONG GlobalPointer
|
|
;; );
|
|
;;
|
|
;;Routine Description:
|
|
;;
|
|
;; This function scans the scope tables associated with the specified
|
|
;; procedure and calls exception and termination handlers as necessary.
|
|
;;
|
|
;;Arguments:
|
|
;;
|
|
;; MemoryStack (rcx) - memory stack pointer of establisher frame
|
|
;;
|
|
;; BackingStore (rdx) - backing store pointer of establisher frame
|
|
;;
|
|
;; Handler (r8) - Entry point of handler
|
|
;;
|
|
;; GlobalPointer (r9) - GP of termination handler
|
|
;;
|
|
;;Return Value:
|
|
;;
|
|
;; Returns the continuation point
|
|
;;
|
|
;;--
|
|
|
|
PUBLIC __Cxx_ExecuteHandler
|
|
_TEXT SEGMENT
|
|
__Cxx_ExecuteHandler PROC NEAR
|
|
|
|
mov gp, r9
|
|
jmp r8
|
|
|
|
__Cxx_ExecuteHandler ENDP
|
|
_TEXT ENDS
|
|
*/
|