. POPFRAME

Gera uma entrada de código WOD_PUSH_CANONICAL_FRAME Windows unwind data (WOD) no epílogo.

Syntax

. POPFRAMEVALOR CÓDIGO | ⟧

Parâmetros

valor
Um modificador numérico opcional no intervalo 0–255.
É mutuamente exclusivo com o CODE. Se especificar a palavra-chave CODE opcional, a entrada do código de desmantelamento recebe um modificador de 1.
Se especificar um valor numérico opcional em vez disso, recebe o valor especificado.
Se não passares um argumento, o valor é 0.

Remarks

Importante

Esta diretiva é experimental e está sujeita a alterações. Ativar Unwind Versão 3 com ml64.exe /unwindv3.

O . A diretiva POPFRAME permite ml64.exe aos utilizadores especificar como uma função de frame se desenrola num epílogo. Só pode usá-lo dentro de uma região epilog, entre . BEGINEPILOG e . FIM EPÍLOGO.

  • . O POPFRAME só é válido no Unwind Versão 3. É o equivalente epílogo de . PUSHFRAME. O valor do operando deve corresponder ao correspondente . PUSHFRAME no prólogo.
  • Em Unwind Versão 3, . O POPFRAME deve aparecer antes da instrução que implementa a ação a desenrolar. Para garantir o acordo, envolve tanto as diretivas de desmantelamento como o código que devem desfazer numa macro.
  • Na Versão 3 do Unwind, as diretivas de epílogo são obrigatórias para a geração do código de desmantelamento do epílogo. Não são emitidos códigos de desmantelamento do epílogo sem um .BEGINEPILOG/.ENDEPILOG par.
  • Estas diretivas geram metadados de desmantelamento (.xdata e .pdata secções), mas não produzem código executável.

Note

No Unwind Versão 1, as diretivas aparecem após a instrução correspondente. No Unwind Versão 3, as diretivas aparecem antes da instrução.

Exemplo para unwindv3

O exemplo seguinte mostra como usar . POPFRAME num epílogo para indicar um gestor de interrupções que empurra e destrói um frame 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

Ver também

x64 Unwind Versão 3 (experimental)
. PUSHFRAME
. BEGINEPILOG
. FIM EPÍLEGO
MASM BNF Gramática