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