Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Inserisce il campo registro frame e l'offset nelle informazioni di rimozione utilizzando il registro (reg) e l'offset specificati (offset). L'offset deve essere un multiplo di 16 e minore o uguale a 240. Questa direttiva genera anche una UWOP_SET_FPREG voce di codice di rimozione per il registro specificato utilizzando l'offset del prologo corrente.
Sintassi
.SETFRAMEreg, offset
Osservazioni:
Usare .SETFRAME per specificare la modalità di rimozione di una funzione frame. È possibile usarlo solo all'interno del prologo, che si estende dalla PROCFRAME dichiarazione all'oggetto . Direttiva ENDPROLOG . Queste direttive generano metadati di rimozione (.xdata e .pdata sezioni) ma non producono codice eseguibile. Precedere .SETFRAME le istruzioni che implementano le azioni da rimuovere. Per garantire il contratto, eseguire il wrapping di entrambe le direttive di rimozione e il codice da rimuovere in una macro.
Esempio
Descrizione
L'esempio seguente illustra come usare un puntatore a fotogrammi:
Codice
; 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 di rimozione versione 3
Importante
Il supporto della versione 3 della rimozione è sperimentale ed è soggetto a modifiche. Abilitarlo usando ml64.exe /unwindv3.
In Rimozione versione 3 .SETFRAME genera una WOD_SET_FPREG voce di codice di rimozione per il registro specificato usando l'offset del prologo corrente. Compila anche il campo registro frame e l'offset nelle informazioni di rimozione.
L'offset deve essere un multiplo di 16 e minore o uguale a 240.
Note
In Rimozione versione 1 le direttive vengono fornite dopo l'istruzione . In Rimozione versione 3, le direttive vengono prima dell'istruzione.
.SETFRAME deve essere visualizzato prima dell'istruzione descritta. Questo requisito è l'opposto della versione 1, in cui la direttiva segue l'istruzione .
Esempio di rimozionev3
; 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
La controparte dell'epilogo è . UNSETFRAME.
Vedi anche
Versione di rimozione x64 3 (sperimentale)
MASM per x64 (ml64.exe)
Riferimento alle direttive
Grammatica BNF MASM