Поделиться через


Функция 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

Расположение компьютера. Если этот параметр равен 0, компьютер находится в области пролога, эпилога или области пустого кадра функции. Если этот параметр равен 1, компьютер находится в теле функции.

Этот параметр отсутствует в x64.

[out] EstablisherFrame

Указатель на структуру FRAME_POINTERS , которая получает значение указателя на рамку установки. Указатель реального кадра определяется только в том случае, если inFunction имеет значение 1.

Этот параметр имеет тип PULONG64 в x64.

[in, out, optional] ContextPointers

Необязательный указатель на структуру указателей контекста.

Возвращаемое значение

Эта функция возвращает указатель на EXCEPTION_ROUTINE функцию обратного вызова.

Комментарии

Полный список маркеров эпилога для x64 выглядит следующим образом:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 , где целевой объект находится за пределами функции, в которой выполняется развертывание
  • jmp qword ptr imm32
  • rex.w jmp reg

Требования

   
Целевая платформа Windows
Header winnt.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

КОНТЕКСТЕ

EXCEPTION_RECORD

RtlLookupFunctionEntry

API-интерфейсы Vertdll, доступные в анклавах VBS