. UNSETFRAME

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

.UNSETFRAME reg, 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