Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
.ALLOCSTACK gera um UWOP_ALLOC_SMALL ou um UWOP_ALLOC_LARGE com o tamanho especificado para o deslocamento atual no prólogo.
Sintaxe
.ALLOCSTACKTamanho
Remarks
O Microsoft Assembler (MASM) escolhe a codificação mais eficiente para um determinado tamanho.
.ALLOCSTACK permite ml64.exe aos utilizadores especificar como uma função de frame se desenrola e só é permitido dentro do prólogo, que se estende da declaração PROCFRAME até ao . Diretiva ENDPROLOG .
- Estas diretivas geram metadados de desmantelamento (
.xdatae.pdatasecções), mas não produzem código executável. - Comece
.ALLOCSTACKcom as instruções que realmente implementam as ações a desenrolar. Envolve tanto as diretivas de desmantelamento como o código que devem desfazer numa macro para garantir o acordo.
O operando de tamanho deve ser um múltiplo de 8.
A contraparte do epílogo é . FREESTACK.
Exemplo: especificar um unwind/traiteur de exceções de unwind versão 3
O exemplo seguinte mostra como especificar um tratador de desenrolar/exceção:
; 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 do Unwind Versão 3
Importante
O suporte ao Unwind Versão 3 é experimental e está sujeito a alterações. Ative-o usando ml64.exe /unwindv3.
.ALLOCSTACKgera uma WOD_ALLOC_SMALLentrada do código de WOD_ALLOC_LARGEWOD_ALLOC_HUGE desbobinamento da Versão 3 com o tamanho especificado para o deslocamento atual no prólogo.
.ALLOCSTACK deve aparecer antes da sub rsp, N instrução que descreve. Este requisito é o oposto da Versão 1, onde a diretiva segue a instrução.
O MASM emite um de três códigos de desmantelamento, dependendo do tamanho da alocação:
| Código de desmontagem | Condition |
|---|---|
WOD_ALLOC_SMALL |
Tamanho ≤ 128 bytes |
WOD_ALLOC_LARGE |
Tamanho ≤ 32 KB |
WOD_ALLOC_HUGE |
Tamanho> 32 KB |
A versão 1 gera apenas UWOP_ALLOC_SMALL ou UWOP_ALLOC_LARGE. A versão 3 adiciona uma terceira variante, WOD_ALLOC_HUGE, para alocações superiores a 32 KB.
Note
No Unwind Versão 1, a diretiva aparece após a instrução correspondente. Na Versão 3 de Desenrolar, a diretiva aparece antes da instrução.
Exemplo para unwindv3
; 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
Ver também
x64 Unwind Versão 3 (experimental)
Referência de Diretivas
MASM BNF Gramática
MASM para x64 (ml64.exe)