.ALLOCSTACK

.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

.ALLOCSTACK Taille

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 (.xdata et .pdata des sections) mais ne produisent pas de code exécutable.
  • Précèdez .ALLOCSTACK les 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)