Compartilhar via


.SETFRAME

Preenche o campo do registro de quadro e o deslocamento nas informações de desenrolamento usando o registro (reg) e o deslocamento (offset) especificados. O deslocamento deve ser um múltiplo de 16 e menor ou igual a 240. Essa diretiva também gera uma entrada de código de desenrolamento UWOP_SET_FPREG para o registro especificado usando o deslocamento do prólogo atual.

Sintaxe

. SETFRAME reg, deslocamento

Comentários

.SETFRAME permite que usuários de ml64.exe especifiquem como uma função de quadro desenrola e só é permitido dentro do prólogo, que se estende da declaração PROC FRAME para a diretiva .ENDPROLOG. Essas diretivas não geram código. Elas só geram .xdata e .pdata. .SETFRAME deve ser precedido por instruções que realmente implementam as ações a serem desenroladas. É uma boa prática encapsular as diretivas de desacoplamento e o código que elas devem desacoplar em uma macro para garantir o acordo.

Para obter mais informações, confira MASM para x64 (ml64.exe).

Amostra

Descrição

A amostra a seguir mostra como usar um ponteiro de quadro:

Código

; ml64 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
   push rbp
.pushreg rbp
   sub rsp, 010h
.allocstack 010h
   mov rbp, rsp
.setframe rbp, 0
.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
   add rsp, 010h
   pop rbp
   ret
frmex2 ENDP
_text ENDS
END

Confira também

Referência de diretivas
Gramática BNF do MASM