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.
Genera una WOD_SET_FPREG entrada de código de desenredado para el registro y desplazamiento especificados mediante el desplazamiento actual en el epílogo.
Syntax
.UNSETFRAMEreg, offset
Parámetros
reg
Registro de puntero de marco que se va a anular.
offset
Desplazamiento en el marco de pila donde se estableció el puntero de marco.
Observaciones
Importante
Esta directiva es experimental y está sujeta a cambios. Habilite Desenredado versión 3 con ml64.exe /unwindv3.
.UNSETFRAME solo es válido en Desenredado versión 3. Es el homólogo del epílogo de . SETFRAME.
.UNSETFRAME solo se permite dentro de una región de epílogo, entre . BEGINEPILOG y . ENDEPILOG. Estas directivas generan metadatos de desenredado (.xdata y .pdata secciones), pero no generan código ejecutable.
En Desenredado versión 3, .UNSETFRAME debe aparecer antes de la instrucción que restaura el puntero de pila desde el registro de puntero de marco.
Se recomienda ajustar las directivas de desenredado y el código que están diseñados para desenredar en una macro para garantizar el acuerdo.
En Desenredado versión 3, las directivas de epílogo son obligatorias para la generación de código de desenredado de epílogo. No se emiten códigos de desenredado de epílogo sin un .BEGINEPILOG/.ENDEPILOG par.
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 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
.pushreg rbp
push rbp
.allocstack 010h
sub rsp, 010h
.setframe rbp, 0
mov rbp, rsp
.endprolog
; modify the stack pointer outside of the prologue (similar to alloca)
sub rsp, 060h
; we can unwind from the following AV because of the frame pointer
mov rax, 0
mov rax, [rax] ; AV!
add rsp, 060h
.beginepilog
.unsetframe rbp, 0
mov rsp, rbp
.freestack 010h
add rsp, 010h
.popreg rbp
pop rbp
.endepilog
ret
frmex2 ENDP
_text ENDS
END
Consulte también
x64 Desenredado versión 3 (experimental)
Referencia de directivas
. SETFRAME
. BEGINEPILOG
Gramática BNF de MASM