UNWIND_INFO, structure
Mise à jour : novembre 2007
La structure des informations sur les données de déroulement est utilisée pour enregistrer les effets d'une fonction sur le pointeur de pile et l'emplacement auquel les registres non volatils sont enregistrés sur la pile :
UBYTE: 3 |
Version |
UBYTE: 5 |
Indicateurs |
UBYTE |
Taille du prologue |
UBYTE |
Nombre de codes de déroulement |
UBYTE: 4 |
Registre du frame |
UBYTE: 4 |
Offset du registre du frame (mis à l'échelle) |
USHORT * n |
Tableau de codes de déroulement |
variable |
Peut se présenter sous la forme (1) ou (2) ci-dessous |
(1) Gestionnaire d'exceptions
ULONG |
Adresse du gestionnaire d'exceptions |
variable |
Données du gestionnaire spécifique au langage (facultatif) |
(2) Informations de déroulement chaînées
ULONG |
Adresse de début de fonction |
ULONG |
Adresse de fin de fonction |
ULONG |
Adresse des informations de déroulement |
La structure UNWIND_FUNCTION doit être alignée sur un DWORD en mémoire. Vous trouverez ci-dessous la signification de chaque champ :
Version
Numéro de version des données de déroulement (actuellement 1).Indicateurs
Trois indicateurs sont actuellement définis :UNW_FLAG_EHANDLER La fonction possède un gestionnaire d'exceptions qui doit être appelé lors de la recherche des fonctions devant examiner des exceptions.
UNW_FLAG_UHANDLER La fonction possède un gestionnaire de terminaisons qui doit être appelé lors du déroulement d'une exception.
UNW_FLAG_CHAININFO Cette structure d'informations de déroulement n'est pas la structure principale pour la procédure. Par contre, l'entrée des informations de déroulement chaînées est le contenu d'une entrée RUNTIME_FUNCTION antérieure. Consultez le texte suivant pour obtenir une explication des structures d'informations de déroulement chaînées. Si cet indicateur est défini, les indicateurs UNW_FLAG_EHANDLER et UNW_FLAG_UHANDLER doivent être effacés. Les champs du registre du frame et de l'allocation de pile fixe doivent posséder les mêmes valeurs que dans les informations de déroulement principales.
Taille du prologue
Longueur du prologue de fonction en octets.Nombre de codes de déroulement
Nombre d'emplacements dans le tableau de codes de déroulement. Notez que certains codes de déroulement (par exemple, UWOP_SAVE_NONVOL) exigent plusieurs emplacements dans le tableau.Registre du frame
Si ce champ a une valeur différente de zéro, la fonction utilise un pointeur de frame, et ce champ correspond au numéro du registre non volatil utilisé comme pointeur de frame, à l'aide du même codage que pour le champ d'information d'opération des nœuds UNWIND_CODE.Offset du registre du frame (mis à l'échelle)
Si le champ du registre du frame a une valeur différente de zéro, il s'agit de l'offset mis à l'échelle de RSP qui s'applique au registre FP lorsqu'il est défini. Le registre FP réel a la valeur RSP + 16 * ce nombre, autorisant des offsets compris entre 0 et 240. Cela permet de pointer vers le registre FP au centre de l'allocation de pile locale pour les frames de pile dynamiques, autorisant ainsi une meilleure densité de code par l'intermédiaire d'instructions plus courtes (davantage d'instructions peuvent utiliser le format d'offset signé 8 bits).Tableau de codes de déroulement
Tableau des éléments qui expliquent l'effet du prologue sur les registres non volatils et RSP. Consultez la section relative à UNWIND_CODE pour connaître la signification des différents éléments. À des fins d'alignement, ce tableau possèdera toujours un nombre pair d'entrées, avec la dernière entrée éventuellement inutilisée (auquel cas le tableau comptera une entrée de plus que spécifié par le champ du nombre de codes de déroulement).Adresse du gestionnaire d'exceptions
Pointeur relatif à l'image désignant le gestionnaire d'exceptions/de terminaisons spécifique au langage de la fonction (si l'indicateur UNW_FLAG_CHAININFO est effacé et si l'un des indicateurs UNW_FLAG_EHANDLER ou UNW_FLAG_UHANDLER est défini).Données du gestionnaire spécifique au langage
Données du gestionnaire d'exceptions spécifique au langage de la fonction. Le format de ces données n'est pas défini et est complètement déterminé par le gestionnaire d'exceptions spécifique utilisé.Informations de déroulement chaînées
Si indicateur UNW_FLAG_CHAININFO est défini, la structure UNWIND_INFO se termine par trois UWORD. Ces UWORD représentent les informations RUNTIME_FUNCTION pour la fonction du déroulement chaîné.
Voir aussi
Référence
Données de déroulement pour la gestion des exceptions et la prise en charge du débogueur