Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Génère une WOD_SET_FPREG entrée de code de déroulement pour le registre et le décalage spécifiés à l’aide du décalage actuel dans l’épilogue.
Syntaxe
.UNSETFRAMEreg, offset
Paramètres
reg
Registre du pointeur d’image pour annuler l’ensemble.
Compenser
Décalage dans le cadre de la pile où le pointeur d’image a été établi.
Remarques
Important
Cette directive est expérimentale et peut être modifiée. Activez Unwind Version 3 avec ml64.exe /unwindv3.
.UNSETFRAME est valide uniquement dans Unwind Version 3. C’est l’épilogue équivalent à . SETFRAME.
.UNSETFRAME est autorisé uniquement dans une région épilogue, entre . BEGINEPILOG et . ENDEPILOG. 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.
Dans Unwind Version 3, .UNSETFRAME doit apparaître avant l’instruction qui restaure le pointeur de pile à partir du registre du pointeur d’image.
Il est recommandé d’encapsuler les directives de déroulement et le code qu’ils sont destinés à dérouler dans une macro pour garantir l’accord.
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.
Note
Dans Unwind Version 1, la directive apparaît après l’instruction correspondante. Dans Unwind Version 3, la directive apparaît avant l’instruction.
Exemple de déroulement3
; ml64 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
.pushreg rbp
push rbp
.allocstack 010h
sub rsp, 010h
.setframe rbp, 0
mov rbp, rsp
.endprolog
; modify the stack pointer outside of the prologue (similar to alloca)
sub rsp, 060h
; we can unwind from the following AV because of the frame pointer
mov rax, 0
mov rax, [rax] ; AV!
add rsp, 060h
.beginepilog
.unsetframe rbp, 0
mov rsp, rbp
.freestack 010h
add rsp, 010h
.popreg rbp
pop rbp
.endepilog
ret
frmex2 ENDP
_text ENDS
END
Voir aussi
x64 Unwind Version 3 (expérimentale)
Informations de référence sur les directives
. SETFRAME
. BEGINEPILOG
Grammaire MASM BNF