다음을 통해 공유


RtlVirtualUnwind 함수(winnt.h)

지정된 함수 컨텍스트 앞에 오는 함수의 호출 컨텍스트를 검색합니다.

참고

 이 함수는 모든 프로세서 플랫폼에서 구현되지 않으며 구현은 이를 지원하는 각 플랫폼에서 다릅니다. 다음 프로토타입은 모든 잠재적 매개 변수 및 해당 애플리케이션을 나열합니다. 프로세서별 함수 프로토타입에 대해 자세히 읽어보세요.

구문

NTSYSAPI PEXCEPTION_ROUTINE RtlVirtualUnwind(
  [in]                DWORD                          HandlerType,
  [in]                DWORD64                        ImageBase,
  [in]                DWORD64                        ControlPc,
  [in]                PRUNTIME_FUNCTION              FunctionEntry,
  [in, out]           PCONTEXT                       ContextRecord,
  [out]               PVOID                          *HandlerData,
  [out]               PDWORD64                       EstablisherFrame,
  [in, out, optional] PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);

매개 변수

[in] HandlerType

처리기 형식입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

이 매개 변수는 x64에만 존재합니다.

의미
UNW_FLAG_NHANDLER
0x0
함수에 처리기가 없습니다.
UNW_FLAG_EHANDLER
0x1
함수에는 호출해야 하는 예외 처리기가 있습니다.
UNW_FLAG_UHANDLER
0x2
함수에는 예외를 해제할 때 호출해야 하는 종료 처리기가 있습니다.
UNW_FLAG_CHAININFO
0x4
FunctionEntry 멤버는 이전 함수 테이블 항목의 내용입니다.

[in] ImageBase

함수가 속한 모듈의 기본 주소입니다.

[in] ControlPc

컨트롤이 지정된 함수를 떠난 가상 주소입니다.

[in] FunctionEntry

지정된 함수에 대한 함수 테이블 항목의 주소입니다. 함수 테이블 항목을 가져오려면 RtlLookupFunctionEntry 함수를 호출합니다.

[in, out] ContextRecord

이전 프레임의 컨텍스트를 나타내는 CONTEXT 구조체에 대한 포인터입니다.

[out] HandlerData

PC의 위치입니다. 이 매개 변수가 0이면 PC가 함수의 프롤로그, 에필로그 또는 null 프레임 영역에 있습니다. 이 매개 변수가 1이면 PC가 함수 본문에 있습니다.

이 매개 변수는 x64에 없습니다.

[out] EstablisherFrame

설정자 프레임 포인터 값을 수신하는 FRAME_POINTERS 구조체에 대한 포인터입니다. 실제 프레임 포인터는 InFunction 이 인 경우에만 정의됩니다 1.

이 매개 변수는 x64에서 PULONG64 형식입니다.

[in, out, optional] ContextPointers

컨텍스트 포인터 구조에 대한 선택적 포인터입니다.

반환 값

이 함수는 EXCEPTION_ROUTINE 콜백 함수에 대한 포인터를 반환합니다.

설명

x64에 대한 에필로그 마커의 전체 목록은 다음과 같습니다.

  • ret
  • ret n
  • rep ret
  • 대상이 해제되는 함수 외부에 있는 jmp imm8 | imm32
  • jmp qword ptr imm32
  • rex.w jmp reg

요구 사항

   
대상 플랫폼 Windows
헤더 winnt.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CONTEXT

EXCEPTION_RECORD

RtlLookupFunctionEntry

VBS Enclave에서 사용할 수 있는 Vertdll API