Partilhar via


estrutura UNWIND_INFO

A estrutura de informações de dados de desenrolamento é usada para registrar os efeitos de que uma função tem no ponteiro de pilha e onde os registradores de não-volátil são salvos na pilha:

UBYTE: 3

Version

UBYTE: 5

Sinalizadores

UBYTE

Tamanho de prólogo

UBYTE

Contagem dos códigos de desenrolamento

UBYTE: 4

Registro de quadro

UBYTE: 4

Deslocamento de quadro de registro (dimensionado)

USHORT * n

Matriz de códigos de desenrolamento.

variable

Pode ser de formulário (1) ou (2) abaixo

(1) Manipulador de exceção

ULONG

Endereço do manipulador de exceção

variable

Dados do manipulador de determinado idioma (opcionais)

(2) Encadeado desenrolar Info

ULONG

Endereço de início da função

ULONG

Endereço de final de função

ULONG

Endereço de info de desenrolamento.

A estrutura UNWIND_INFO deve ser DWORD alinhado na memória. O significado de cada campo é o seguinte:

  • Version
    Número de versão dos dados de desenrolamento, atualmente 1.

  • Sinalizadores
    Três sinalizadores são definidos no momento:

    UNW_FLAG_EHANDLER a função tem um manipulador de exceção que deve ser chamado quando procurando funções precisam examinar exceções.

    UNW_FLAG_UHANDLER a função tem um manipulador de terminação que deve ser chamado quando o desenrolar a exceção.

    UNW_FLAG_CHAININFO Isso desenrolar info estrutura não é a principal para o procedimento. Em vez disso, o encadeado desenrolar info de entrada é o conteúdo de uma entrada RUNTIME_FUNCTION anterior. Consulte o seguinte texto para uma explicação sobre encadeadas desenrolar estruturas de informações. Se este sinalizador estiver definido, os sinalizadores UNW_FLAG_EHANDLER e UNW_FLAG_UHANDLER devem ser limpo. Além disso, os campos de alocação de quadro register e pilha fixa devem ter os mesmos valores como no principal desenrolar info.

  • Tamanho de prólogo
    Comprimento de prólogo do função em bytes.

  • Contagem dos códigos de desenrolamento
    Este é o número de slots da matriz de códigos de desenrolamento. Observe que alguns códigos (por exemplo, UWOP_SAVE_NONVOL) de desenrolamento exigem mais de um slot no array.

  • Registro de quadro
    Se for diferente de zero, em seguida, a função usa um ponteiro de quadro e este campo é o número do registro não-volátil usado como o ponteiro do quadro, usando a mesma codificação para o campo de informações da operação de nós UNWIND_CODE.

  • Quadro de registrar o deslocamento (dimensionado)
    Se o campo do registro de quadro for diferente de zero, este é o deslocamento de escala do RSP é aplicado para o reg FP quando ela é estabelecida. O reg FP real é definido como RSP + 16 * este número, permitindo que os deslocamentos de 0 a 240. Isso permite apontando o reg FP no meio da alocação de pilha local para quadros de pilha dinâmicas, permitindo melhor densidade de código por meio de instruções de menores (mais instruções podem usar o formulário de deslocamento assinado de 8 bits).

  • Matriz de códigos de desenrolamento.
    Esta é uma matriz dos itens que explica o efeito de prólogo RSP e registradores de não-volátil. Consulte a seção sobre UNWIND_CODE para os significados dos itens individuais. Para fins de alinhamento, essa matriz terá sempre um número par de entradas, com a entrada final potencialmente não utilizada que (caso em que a matriz será uma maior do que o indicado pela contagem de campo de códigos de desenrolamento).

  • Endereço do manipulador de exceção
    Este é um ponteiro de imagem relativo ao manipulador de exceção de determinado idioma/término da função (se o sinalizador UNW_FLAG_CHAININFO está desmarcado e um dos sinalizadores UNW_FLAG_EHANDLER ou UNW_FLAG_UHANDLER é definido).

  • Dados específicos do idioma manipulador
    Esta é a dados da função do manipulador de exceção específico do idioma. O formato desses dados é não for especificado e totalmente determinado pelo manipulador de exceção específico em uso.

  • Encadeadas desenrolar Info
    Se o sinalizador UNW_FLAG_CHAININFO é definida a estrutura UNWIND_INFO termina com três UWORDs. Essas UWORDs representam as informações de RUNTIME_FUNCTION para a função do desenrolamento encadeada.

Consulte também

Referência

Desenrolar dados para manipulação de exceção, suporte a depurador