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.
.ALLOCSTACK génère une UWOP_ALLOC_SMALL ou une UWOP_ALLOC_LARGE avec la taille spécifiée pour le décalage actuel dans le prologue.
Syntaxe
.ALLOCSTACKTaille
Notes
Microsoft Assembleur (MASM) choisit l’encodage le plus efficace pour une taille donnée.
.ALLOCSTACK permet ml64.exe aux utilisateurs de spécifier comment une fonction frame se déroule et est uniquement autorisée dans le prologue, qui s’étend de la déclaration PROCFRAME à l’objet . Directive ENDPROLOG .
- Ces directives génèrent des métadonnées de déroulement (
.xdataet.pdatades sections) mais ne produisent pas de code exécutable. - Précèdez
.ALLOCSTACKles instructions qui implémentent réellement les actions à annuler. Incluez à la fois les directives de déroulement et le code qu’ils sont destinés à dérouler dans une macro pour garantir l’accord.
L’opérande de taille doit être un multiple de 8.
L’épilogue équivalent est . FREESTACK.
Exemple : spécifier un gestionnaire de déroulement/exception version 3
L’exemple suivant montre comment spécifier un gestionnaire de déroulement/exception :
; ml64 ex3.asm /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
; exception/unwind handler body
ret 0
Example3_UW ENDP
Example3 PROC FRAME : Example3_UW
sub rsp, 16
.allocstack 16
.endprolog
; function body
add rsp, 16
ret 0
Example3 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.
.ALLOCSTACK génère une WOD_ALLOC_SMALLentrée de code de déroulement , WOD_ALLOC_LARGEou WOD_ALLOC_HUGE Unwind Version 3 avec la taille spécifiée pour le décalage actuel dans le prolog.
.ALLOCSTACK doit apparaître avant l’instruction sub rsp, N qu’elle décrit. Cette exigence est l’inverse de la version 1, où la directive suit l’instruction.
MASM émet l’un des trois codes de déroulement en fonction de la taille d’allocation :
| Code de déroulement | Pathologie |
|---|---|
WOD_ALLOC_SMALL |
taille ≤ 128 octets |
WOD_ALLOC_LARGE |
taille ≤ 32 Ko |
WOD_ALLOC_HUGE |
Taille> 32 Ko |
La version 1 génère uniquement UWOP_ALLOC_SMALL ou UWOP_ALLOC_LARGE. La version 3 ajoute une troisième variante, WOD_ALLOC_HUGEpour les allocations supérieures à 32 Ko.
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 ex3.asm /unwindv3 /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
; exception/unwind handler body
ret 0
Example3_UW ENDP
Example3 PROC FRAME : Example3_UW
.allocstack 16
sub rsp, 16
.endprolog
; function body
add rsp, 16
ret 0
Example3 ENDP
text ENDS
END
Voir aussi
x64 Unwind Version 3 (expérimentale)
Informations de référence sur les directives
Grammaire MASM BNF
MASM pour x64 (ml64.exe)