Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
.ALLOCSTACK genera un UWOP_ALLOC_SMALL o un UWOP_ALLOC_LARGE con el tamaño especificado para el desplazamiento actual en el prólogo.
Sintaxis
.ALLOCSTACKtamaño
Comentarios
Microsoft Ensamblador (MASM) elige la codificación más eficaz para un tamaño determinado.
.ALLOCSTACK permite ml64.exe a los usuarios especificar cómo se desenreda una función de marco y solo se permite dentro del prólogo, que se extiende desde la declaración PROCFRAME a . Directiva ENDPROLOG .
- Estas directivas generan metadatos de desenredado (
.xdatay.pdatasecciones), pero no generan código ejecutable. - Precede con
.ALLOCSTACKlas instrucciones que realmente implementan las acciones que se van a desenlazar. Encapsula las directivas de desenredado y el código que están diseñados para desenredar en una macro para garantizar el acuerdo.
El operando tamaño debe ser un múltiplo de 8.
El homólogo de epílogo es . FREESTACK.
Ejemplo: especificar un controlador de desenredado o excepción de desenredado versión 3
En el ejemplo siguiente se muestra cómo especificar un controlador de excepciones/desenredado:
; 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
Comportamiento de desenredado versión 3
Importante
La compatibilidad con Desenredado versión 3 es experimental y está sujeta a cambios. Habilite mediante ml64.exe /unwindv3.
.ALLOCSTACK genera una WOD_ALLOC_SMALLentrada de código de desenredado , WOD_ALLOC_LARGEo WOD_ALLOC_HUGE Desenredado versión 3 con el tamaño especificado para el desplazamiento actual en el prólogo.
.ALLOCSTACK debe aparecer antes de la sub rsp, N instrucción que describe. Este requisito es lo contrario a la versión 1, donde la directiva sigue la instrucción .
MASM emite uno de los tres códigos de desenredado en función del tamaño de asignación:
| Código de desenredado | Condition |
|---|---|
WOD_ALLOC_SMALL |
tamaño ≤ 128 bytes |
WOD_ALLOC_LARGE |
tamaño ≤ 32 KB |
WOD_ALLOC_HUGE |
tamaño> 32 KB |
La versión 1 solo UWOP_ALLOC_SMALL genera o UWOP_ALLOC_LARGE. La versión 3 agrega una tercera variante, WOD_ALLOC_HUGE, para las asignaciones de más de 32 KB.
Note
En Desenredar versión 1, la directiva aparece después de la instrucción correspondiente. En Desenredar versión 3, la directiva aparece antes de la instrucción .
Ejemplo de desenredado3
; 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
Consulte también
x64 Desenredado versión 3 (experimental)
Referencia de directivas
Gramática BNF de MASM
MASM para x64 (ml64.exe)