структура UNWIND_INFO
Информационная структура очищения данных используется для записи эффектов функции на указатель стека и места в стеке, где сохраняются неизменяемые регистры:
UBYTE: 3 |
Версия |
UBYTE: 5 |
Флаги |
UBYTE |
Размер пролога |
UBYTE |
Счетчик кодов очистки |
UBYTE: 4 |
Регистр кадра |
UBYTE: 4 |
Смещение регистра кадра (масштабированное) |
USHORT * n |
Массив кодов очистки |
переменная |
Может находиться в форме (1) или (2) ниже |
Обработчик исключений (1)
ULONG |
Адрес обработчика исключений |
переменная |
Данные языкового обработчика (необязательно) |
(2) Прикованный размотайте сведения
ULONG |
Начальный адрес функции |
ULONG |
Конечный адрес функции |
ULONG |
Адрес очистки |
Структура UNWIND_INFO должна быть выровнена в памяти по DWORD.Каждое поле имеет следующее значение:
Версия
Номер версии данных возврата, текущая версия — 1.Флаги
В настоящее время определены три флага:UNW_FLAG_EHANDLER функция содержит обработчик исключений, который должен вызываться и функции, которые необходимо проанализировать исключения.
UNW_FLAG_UHANDLER функция содержит обработчик завершения, который должен вызываться развертывание исключение.
UNW_FLAG_CHAININFO это разматывает структуру нет основные сведения и процедуры.Вместо этого запись информации очистки является содержимым предыдущей записи RUNTIME_FUNCTION.Просмотрите дальнейший текст, поясняющий структуры зависимой информации очистки.Если этот флаг установлен, тогда флаги UNW_FLAG_EHANDLER и UNW_FLAG_UHANDLER должны быть сняты.Кроме того, регистр кадра и фиксированные поля выделения стека должны иметь значения, совпадающие с значениями основной информации очистки.
Размер пролога
Длина пролога функции в байтах.Счетчик кодов очистки
Количество гнезд в массиве кодов очистки.Обратите внимание на то, что некоторые коды очистки (например, UWOP_SAVE_NONVOL) требуют больше одного гнезда в массиве.Регистр кадра
Если значение отличается от нулевого, то функция использует указатель кадра, а это поле является номером постоянного регистра, используемого в качестве указателя кадра с той же кодировкой, что и для поля информации об операции узлов UNWIND_CODE.Смещение регистра кадра (масштабированное)
Если поле регистра кадра отлично от нуля, то это поле содержит масштабированное смещение от RSP, примененного к FP reg после его установки.Действительное значение FP reg задается как RSP + 16 * это число, что делает возможными смещения от 0 до 240.Это разрешает направление FP reg в середину локального выделения стека для динамических кадров стека, обеспечивая лучшую плотность кода за счет использования более коротких инструкций (больше инструкций могут использовать для смещения 8-разрядное знаковое число).Массив кодов очистки
Это массив элементов, объясняющий степень воздействия пролога на постоянные регистры и RSP.Просмотрите подраздел об использовании UNWIND_CODE для значений индивидуальных элементов.Чтобы выполнить выравнивание, этот массив всегда будет иметь четное количество записей с потенциально неиспользуемой последней записью (в таком случае массив будет на одну запись длиннее, чем указано счетчиком полей кодов очистки).Адрес обработчика исключений
Это относительный указатель на обработчик языковых исключений или обработчик завершений функции (если флаг UNW_FLAG_CHAININFO снят, а один из флагов UNW_FLAG_EHANDLER или UNW_FLAG_UHANDLER установлен).Данные обработчика определенного языка
Это данные обработчика исключений выбранного языка функции.Формат этих данных не указан и полностью определяется конкретным используемым обработчиком исключений.Зависимая информация очистки
Если флаг UNW_FLAG_CHAININFO установлен, тогда структура UNWIND_INFO завершается тремя UWORD.Эти UWORD представляют связанную информацию RUNTIME_FUNCTION для обращаемой функции.
См. также
Ссылки
Данные раскрутки для обработки исключений и поддержки отладчика