. ALLOCSTACK

.ALLOCSTACK genereert een UWOP_ALLOC_SMALL of een UWOP_ALLOC_LARGE met de opgegeven grootte voor de huidige verschuiving in de proloog.

Syntaxis

.ALLOCSTACK Grootte

Opmerkingen

Microsoft Assemblyer (MASM) kiest de meest efficiënte codering voor een bepaalde grootte.

.ALLOCSTACK stelt gebruikers in staat ml64.exe op te geven hoe een framefunctie tot rust komt en is alleen toegestaan in de proloog, die zich uitbreidt van de PROC-verklaringFRAME tot de . ENDPROLOG-richtlijn .

  • Deze instructies genereren een ontspannen metagegevens (.xdata en .pdata secties), maar produceren geen uitvoerbare code.
  • Ga vooraf aan .ALLOCSTACK de instructies waarmee de acties daadwerkelijk worden geïmplementeerd. Verpakken zowel de richtlijnen voor afwikkelen als de code die ze zijn bedoeld om in een macro tot rust te komen om ervoor te zorgen dat ze akkoord gaan.

De grootteoperand moet een veelvoud van 8 zijn.

De epiloog tegenhanger is . FREESTACK.

Voorbeeld: geef een afwikkelingsversie 3 op/ uitzonderingshandler

In het volgende voorbeeld ziet u hoe u een handler voor ontspannen/uitzonderingen kunt opgeven:

; 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

Gedrag van versie 3 tot rust laten komen

Important

Ondersteuning voor versie 3 is experimenteel en kan worden gewijzigd. Schakel het in met behulp van ml64.exe /unwindv3.

.ALLOCSTACK genereert een WOD_ALLOC_SMALL, WOD_ALLOC_LARGEof WOD_ALLOC_HUGE afwikkelen versie 3 codevermelding met de opgegeven grootte voor de huidige offset in de prolog.

.ALLOCSTACK moet worden weergegeven voordat de sub rsp, N instructie wordt beschreven. Deze vereiste is het tegenovergestelde van versie 1, waarbij de richtlijn de instructie volgt.

MASM verzendt een van de drie afwikkelcodes, afhankelijk van de toewijzingsgrootte:

Code tot rust laten komen Conditie
WOD_ALLOC_SMALL grootte ≤ 128 bytes
WOD_ALLOC_LARGE grootte ≤ 32 kB
WOD_ALLOC_HUGE Grootte> 32 KB

Versie 1 genereert alleen UWOP_ALLOC_SMALL of UWOP_ALLOC_LARGE. Versie 3 voegt een derde variant toe, WOD_ALLOC_HUGEvoor toewijzingen die groter zijn dan 32 kB.

Opmerking

In Relax versie 1 wordt de instructie weergegeven na de bijbehorende instructie. In Relax versie 3 wordt de instructie weergegeven vóór de instructie.

Voorbeeld voor relaxv3

; 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

Zie ook

x64 Versie 3 tot rust laten komen (experimenteel)
Naslaginformatie over richtlijnen
MASM BNF-grammatica
MASM voor x64 (ml64.exe)