Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.ALLOCSTACK genera un UWOP_ALLOC_SMALL o un UWOP_ALLOC_LARGE con le dimensioni specificate per l'offset corrente nel prologo.
Sintassi
.ALLOCSTACKDimensione
Osservazioni:
Microsoft Assembler (MASM) sceglie la codifica più efficiente per una determinata dimensione.
.ALLOCSTACK consente agli utenti di ml64.exe specificare il modo in cui una funzione frame si rimuove ed è consentita solo all'interno del prologo, che si estende dalla dichiarazione PROCFRAMEall'oggetto . Direttiva ENDPROLOG .
- Queste direttive generano metadati di rimozione (
.xdatae.pdatasezioni) ma non producono codice eseguibile. - Precedere
.ALLOCSTACKle istruzioni che implementano effettivamente le azioni da rimuovere. Eseguire il wrapping di entrambe le direttive di rimozione e il codice che devono rimuovere in una macro per garantire il contratto.
L'operando di dimensioni deve essere un multiplo di 8.
La controparte dell'epilogo è . FREESTACK.
Esempio: specificare un gestore di rimozione versione 3/eccezione
L'esempio seguente illustra come specificare un gestore di rimozione/eccezione:
; 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
Comportamento di rimozione versione 3
Importante
Il supporto della versione 3 della rimozione è sperimentale ed è soggetto a modifiche. Abilitarlo usando ml64.exe /unwindv3.
.ALLOCSTACK genera una WOD_ALLOC_SMALLvoce di codice di rimozione , WOD_ALLOC_LARGEo WOD_ALLOC_HUGE di rimozione versione 3 con le dimensioni specificate per l'offset corrente nel prologo.
.ALLOCSTACK deve essere visualizzato prima dell'istruzione sub rsp, N descritta. Questo requisito è l'opposto della versione 1, in cui la direttiva segue l'istruzione .
MASM genera uno dei tre codici di rimozione a seconda delle dimensioni di allocazione:
| Codice di rimozione | Condition |
|---|---|
WOD_ALLOC_SMALL |
dimensioni ≤ 128 byte |
WOD_ALLOC_LARGE |
dimensioni ≤ 32 KB |
WOD_ALLOC_HUGE |
Dimensione> 32 KB |
La versione 1 genera solo UWOP_ALLOC_SMALL o UWOP_ALLOC_LARGE. La versione 3 aggiunge una terza variante, WOD_ALLOC_HUGE, per le allocazioni superiori a 32 KB.
Note
In Rimozione versione 1 la direttiva viene visualizzata dopo l'istruzione corrispondente. In Rimozione versione 3 la direttiva viene visualizzata prima dell'istruzione.
Esempio di rimozionev3
; 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
Vedi anche
Versione di rimozione x64 3 (sperimentale)
Riferimento a direttive
Grammatica BNF MASM
MASM per x64 (ml64.exe)