Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Preenche o campo de registos de trama e o deslocamento na informação de desenrolar usando o registo (reg) e o offset (offset) especificados. O desvio deve ser um múltiplo de 16 e menor ou igual a 240. Esta diretiva também gera uma UWOP_SET_FPREG entrada de código de desmantelamento para o registo especificado usando o deslocamento prólogo atual.
Syntax
.SETFRAMEregulador, deslocamento
Remarks
Use .SETFRAME para especificar como uma função de frame se desenrola. Só pode usá-lo dentro do prólogo, que se estende da PROCFRAME declaração até ao . Diretiva ENDPROLOG . Estas diretivas geram metadados de desmantelamento (.xdata e .pdata secções), mas não produzem código executável. Preceda .SETFRAME com instruções que implementam as ações a desenrolar. Para garantir o acordo, envolve tanto as diretivas de desmantelamento como o código que devem desfazer numa macro.
Exemplo
Description
O exemplo seguinte mostra como usar um ponteiro de frame:
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
Comportamento do Unwind Versão 3
Importante
O suporte ao Unwind Versão 3 é experimental e está sujeito a alterações. Ative-o usando ml64.exe /unwindv3.
No Unwind Versão 3, .SETFRAME emite uma WOD_SET_FPREG entrada de código de unwind para o registo especificado usando o deslocamento do prólogo atual. Também preenche o campo do registo de frames e o deslocamento na informação de desenrolar. O deslocamento deve ser múltiplo de 16 e menor ou igual a 240.
Note
No Unwind Versão 1, as diretivas surgem após a instrução. No Unwind Versão 3, as diretivas surgem antes da instrução.
.SETFRAME deve aparecer antes da instrução que descreve. Este requisito é o oposto da Versão 1, onde a diretiva segue a instrução.
Exemplo para unwindv3
; 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
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
A contraparte do epílogo é . UNSETFRAME.
Ver também
x64 Unwind Versão 3 (experimental)
MASM para x64 (ml64.exe)
Referência das diretivas
MASM BNF Gramática