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 UWOP_PUSH_NONVOL entrée de code de déroulement pour le numéro de registre spécifié à l’aide du décalage actuel dans le prologue.
Syntaxe
. Registre PUSHREG
le registre peut être l’un des suivants :
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15
Unwind Version 3 étend la prise en charge de l’inscription pour inclure R16-R31.
le registre peut être l’un des suivants :
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31
Notes
Utilisez-la .PUSHREGml64.exe pour spécifier la façon dont une fonction frame se déroule. Vous ne pouvez utiliser .PUSHREG que dans le prologue, qui s’étend de la déclaration PROCFRAME 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 .PUSHREG les instructions qui implémentent réellement 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.
Code
L’exemple suivant montre comment envoyer (push) des registres nonvolatiles.
; ml64 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
push r10
.pushreg r10
push r15
.pushreg r15
push rbx
.pushreg rbx
push rsi
.pushreg rsi
.endprolog
; rest of function ...
ret
Example1 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.
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.
Dans Unwind Version 3, .PUSHREG génère une WOD_PUSH entrée de code de déroulement et doit apparaître avant l’instruction push reg 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 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.pushreg r10
push r10
.pushreg r15
push r15
.pushreg rbx
push rbx
.pushreg rsi
push rsi
.endprolog
; rest of function ...
ret
Example1 ENDP
_text ENDS
END
L’épilogue équivalent est . POPREG.
Voir aussi
x64 Unwind Version 3 (expérimentale)
Informations de référence sur les directives
Grammaire MASM BNF
MASM pour x64 (ml64.exe)