.ALLOCSTACK

.ALLOCSTACK generiert eine UWOP_ALLOC_SMALL oder eine UWOP_ALLOC_LARGE mit der angegebenen Größe für den aktuellen Offset im Prolog.

Syntax

.ALLOCSTACK Größe

Hinweise

Microsoft Assembler (MASM) wählt die effizienteste Codierung für eine bestimmte Größe aus.

.ALLOCSTACK ermöglicht ml64.exe Benutzern anzugeben, wie sich eine Framefunktion ablöst und nur innerhalb des Prologs zulässig ist, der sich von der PROC-Deklaration bis zur . PROC-DeklarationFRAME erstreckt . ENDPROLOG-Direktive .

  • Diese Direktiven generieren entwendige Metadaten (.xdata und .pdata Abschnitte), erzeugen jedoch keinen ausführbaren Code.
  • Stellen Sie sich .ALLOCSTACK die Anweisungen vor, mit denen die Aktionen tatsächlich entwundt werden sollen. Schließen Sie sowohl die Entleer-Direktiven als auch den Code ein, den sie in einem Makro entspannen sollen, um eine Einigung sicherzustellen.

Der Größe-Operand muss ein Vielfaches von 8 sein.

Das Epilog-Gegenstück ist . FREESTACK.

Beispiel: Angeben eines Entspannungs-/Ausnahmehandlers der Version 3

Das folgende Beispiel zeigt, wie Sie einen Ausspann-/Ausnahmehandler angeben:

; 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

Verhalten der Version 3 abwickeln

Important

Der Support von Version 3 wird experimentell gelöst und kann geändert werden. Aktivieren Sie es mithilfe von ml64.exe /unwindv3.

.ALLOCSTACK generiert einen WOD_ALLOC_SMALLCodeeintrag der Version WOD_ALLOC_LARGE3 mit WOD_ALLOC_HUGE der angegebenen Größe für den aktuellen Offset im Prolog.

.ALLOCSTACK muss vor der sub rsp, N beschriebenen Anweisung angezeigt werden. Diese Anforderung ist das Gegenteil von Version 1, wobei die Richtlinie der Anweisung folgt.

MASM emittiert je nach Zuordnungsgröße einen von drei Abspanncodes:

Entladungscode Zustand
WOD_ALLOC_SMALL Größe ≤ 128 Bytes
WOD_ALLOC_LARGE Größe ≤ 32 KB
WOD_ALLOC_HUGE Größe> 32 KB

Version 1 generiert nur UWOP_ALLOC_SMALL oder UWOP_ALLOC_LARGE. Version 3 fügt für Zuordnungen, die größer als 32 KB sind, WOD_ALLOC_HUGEeine dritte Variante hinzu.

Note

In Der Version 1 wird die Direktive nach der entsprechenden Anweisung angezeigt. In Der Version 3 wird die Direktive vor der Anweisung angezeigt.

Beispiel für die Entspannung 3

; 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

Siehe auch

x64 Entspannen Version 3 (experimentell)
Anweisungen – Referenz
MASM BNF Grammatik
MASM für x64 (ml64.exe)