. POPFRAME

Genera una entrada de código de desenredado de datos de desenredado (WOD) WOD_PUSH_CANONICAL_FRAME Windows en el epílogo.

Syntax

. POPFRAMEVALOR DE CÓDIGO | ⟧

Parámetros

valor
Modificador numérico opcional en el intervalo entre 0 y 255.
Mutuamente excluyente con CODE. Si especifica la palabra clave CODE opcional, la entrada de código de desenredado recibe un modificador de 1.
Si especifica un valor numérico opcional en su lugar, recibe el valor especificado.
Si no pasa un argumento, el valor es 0.

Observaciones

Importante

Esta directiva es experimental y está sujeta a cambios. Habilite Desenredado versión 3 con ml64.exe /unwindv3.

. La directiva POPFRAME permite a ml64.exe los usuarios especificar cómo se desenreda una función de marco en un epílogo. Solo puede usarlo dentro de una región de epílogo, entre . BEGINEPILOG y . ENDEPILOG.

  • . POPFRAME solo es válido en Desenredado versión 3. Es el homólogo de epílogo de . PUSHFRAME. El valor del operando debe coincidir con el correspondiente . PUSHFRAME en el prólogo.
  • En Desenredar versión 3, . POPFRAME debe aparecer antes de que la instrucción que implemente la acción que se desenlace. Para garantizar el acuerdo, encapsula las directivas de desenredado y el código que están diseñados para desenredar en una macro.
  • 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.
  • Estas directivas generan metadatos de desenredado (.xdata y .pdata secciones), pero no generan código ejecutable.

Note

En Desenredar versión 1, las directivas aparecen después de la instrucción correspondiente. En Desenredar versión 3, las directivas aparecen antes de la instrucción .

Ejemplo de desenredado3

En el ejemplo siguiente se muestra cómo usar . POPFRAME en un epílogo para indicar un controlador de interrupción que inserta y extrae un marco de máquina canónico.

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .pushframe
   .pushreg rbx
   push rbx
   .allocstack 32
   sub rsp, 32
.endprolog
   ; interrupt handler body ...
   .beginepilog
   .freestack 32
   add rsp, 32
   .popreg rbx
   pop rbx
   .popframe
   .endepilog
   iretq
Example1 ENDP
_text ENDS
END

Consulte también

x64 Desenredado versión 3 (experimental)
. PUSHFRAME
. BEGINEPILOG
. ENDEPILOG
Gramática BNF de MASM