Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fyller i fältet för ramregister och förskjuter informationen med hjälp av det angivna registret (reg) och förskjutningen (offset). Förskjutningen måste vara en multipel av 16 och mindre än eller lika med 240. Det här direktivet genererar också en UWOP_SET_FPREG avspolningskodpost för det angivna registret med den aktuella prologförskjutningen.
Syntax
.SETFRAMEreg, offset
Anmärkningar
Använd .SETFRAME för att ange hur en ramfunktion avspolas. Du kan bara använda den i prologen, som sträcker sig från deklarationen PROCFRAME till . ENDPROLOG-direktivet . Dessa direktiv genererar varva ned metadata (.xdata och .pdata avsnitt) men producerar inte körbar kod. Föregå .SETFRAME med instruktioner som implementerar de åtgärder som ska ångras. För att säkerställa en överenskommelse omsluter du både avaktiveringsdirektiven och den kod som de är avsedda att varva ned i ett makro.
Exempel
Description
Följande exempel visar hur du använder en bildrutepekare:
Kod
; 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
Varva ned version 3-beteende
Important
Stöd för att varva ned version 3 är experimentellt och kan komma att ändras. Aktivera det med hjälp ml64.exe /unwindv3av .
I Varva ned version 3 .SETFRAME avger du en WOD_SET_FPREG avspolningskodpost för det angivna registret med den aktuella prologförskjutningen. Den fyller också i fältet för ramregistrering och förskjuter informationen.
Förskjutningen måste vara en multipel av 16 och mindre än eller lika med 240.
Note
I Varva ned version 1 kommer direktiven efter instruktionen. I Varva ned version 3 kommer direktiven före instruktionen.
.SETFRAME måste visas före instruktionen som beskrivs. Detta krav är motsatsen till version 1, där direktivet följer instruktionen.
Exempel på avspolning 3
; 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
Motsvarigheten till epilogen är . UNSETFRAME.
Se även
x64 Varva ned version 3 (experimentell)
MASM för x64 (ml64.exe)
Referens för direktiv
MASM BNF-grammatik