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.
Renseigne le champ d’enregistrement de cadre et le décalage dans les informations de déroulement à l’aide du registre spécifié (reg) et du décalage (offset). Le décalage doit être un multiple de 16 et inférieur ou égal à 240. Cette directive génère également une UWOP_SET_FPREG entrée de code de déroulement pour le registre spécifié à l’aide du décalage de prologue actuel.
Syntaxe
.SETFRAMEreg, offset
Notes
Permet .SETFRAME de spécifier le déroulement d’une fonction frame. Vous ne pouvez l’utiliser que dans le prologue, qui s’étend de la PROCFRAME déclaration au . Directive ENDPROLOG . 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. Précèdez .SETFRAME les instructions qui implémentent les actions à annuler. 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.
Exemple
Description
L’exemple suivant montre comment utiliser un pointeur d’image :
Code
; ml64 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
push rbp
.pushreg rbp
sub rsp, 010h
.allocstack 010h
mov rbp, rsp
.setframe rbp, 0
.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
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
Déroulement du comportement version 3
Important
La prise en charge de la version 3 du déroulement est expérimentale et peut être modifiée. Activez-le à l’aide de ml64.exe /unwindv3.
Dans Unwind Version 3, .SETFRAME émet une WOD_SET_FPREG entrée de code de déroulement pour le registre spécifié à l’aide du décalage de prologue actuel. Il remplit également le champ d’enregistrement de cadre et le décalage dans les informations de déroulement. Le décalage doit être un multiple de 16 et inférieur ou égal à 240.
Note
Dans Unwind Version 1, les directives viennent après l’instruction. Dans Unwind Version 3, les directives sont antérieures à l’instruction.
.SETFRAME doit apparaître avant l’instruction qu’elle décrit. Cette exigence est l’inverse de la version 1, où la directive suit 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
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
L’épilogue équivalent est . UNSETFRAME.
Voir aussi
x64 Unwind Version 3 (expérimentale)
MASM pour x64 (ml64.exe)
Informations de référence sur les directives
Grammaire MASM BNF