Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
.ALLOCSTACK generiert eine UWOP_ALLOC_SMALL oder eine UWOP_ALLOC_LARGE mit der angegebenen Größe für den aktuellen Offset im Prolog.
Syntax
.ALLOCSTACKGröß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 (
.xdataund.pdataAbschnitte), erzeugen jedoch keinen ausführbaren Code. - Stellen Sie sich
.ALLOCSTACKdie 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)