. POPFRAME

Génère une entrée de code de déroulement WOD_PUSH_CANONICAL_FRAME Windows (WOD) dans l’épilogue.

Syntaxe

. POPFRAMEVALEURCODE | ⟧

Paramètres

valeur
Modificateur numérique facultatif dans la plage 0 à 255.
Mutuellement exclusif avec CODE. Si vous spécifiez le mot clé CODE facultatif, l’entrée de code de déroulement reçoit un modificateur de 1.
Si vous spécifiez une valeur numérique facultative à la place, elle reçoit la valeur spécifiée.
Si vous ne passez pas d’argument, la valeur est 0.

Remarques

Important

Cette directive est expérimentale et peut être modifiée. Activez Unwind Version 3 avec ml64.exe /unwindv3.

Le . La directive POPFRAME permet aux utilisateurs de ml64.exe spécifier comment une fonction frame se déroule dans un épilogue. Vous ne pouvez l’utiliser qu’au sein d’une région épilogue, entre . BEGINEPILOG et . ENDEPILOG.

  • . POPFRAME est valide uniquement dans Unwind Version 3. C’est l’épilogue équivalent de . PUSHFRAME. La valeur d’opérande doit correspondre à la valeur correspondante . PUSHFRAME dans le prologue.
  • Dans Unwind Version 3, . POPFRAME doit apparaître avant l’instruction qui implémente l’action à décoder. Pour garantir l’accord, incluez à la fois les directives de déroulement et le code qu’ils sont destinés à décompresser dans une macro.
  • Dans Unwind Version 3, les directives d’épilogue sont obligatoires pour la génération de code de déroulement d’épilogue. Aucun code de déroulement d’épilogue n’est émis sans .BEGINEPILOG/.ENDEPILOG paire.
  • Ces directives génèrent des métadonnées de déroulement (.xdata et .pdata des sections) mais ne produisent pas de code exécutable.

Note

Dans Unwind Version 1, les directives apparaissent après l’instruction correspondante. Dans Unwind Version 3, les directives apparaissent avant l’instruction.

Exemple de déroulement3

L’exemple suivant montre comment utiliser . POPFRAME dans un épilogue pour indiquer un gestionnaire d’interruptions qui envoie et pop une trame de machine canonique.

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .pushframe
   .pushreg rbx
   push rbx
   .allocstack 32
   sub rsp, 32
.endprolog
   ; interrupt handler body ...
   .beginepilog
   .freestack 32
   add rsp, 32
   .popreg rbx
   pop rbx
   .popframe
   .endepilog
   iretq
Example1 ENDP
_text ENDS
END

Voir aussi

x64 Unwind Version 3 (expérimentale)
. PUSHFRAME
. BEGINEPILOG
. ENDEPILOG
Grammaire MASM BNF