Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vyplní pole registru rámce a posun v informacích o odvíjení pomocí zadaného registru (reg) a posunu (posunu). Posun musí být násobek 16 a menší nebo roven 240. Tato direktiva také vygeneruje UWOP_SET_FPREG položku kódu pro zadaný registr pomocí aktuálního posunu prologu.
Syntaxe
.SETFRAMEreg, offset
Poznámky
Slouží .SETFRAME k určení, jak se funkce rámce odvíje. Lze jej použít pouze v rámci prologu, který se vztahuje z PROCFRAME prohlášení na . ENDPROLOG – direktiva. Tyto direktivy generují metadata unwind (.xdata a .pdata oddíly), ale nevytvářely spustitelný kód.
.SETFRAME Předejděte pokyny, které implementují akce, které se mají zrušit. Pokud chcete zajistit dohodu, zabalte direktivy unwind i kód, který mají v makru uvolnit.
Vzorek
Popis
Následující ukázka ukazuje, jak použít ukazatel rámce:
Code
; 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
Odvinutí chování verze 3
Important
Podpora unwind verze 3 je experimentální a může se změnit. Povolte ho pomocí .ml64.exe /unwindv3
Ve verzi Unwind verze 3 .SETFRAME vygeneruje WOD_SET_FPREG položku kódu pro zadaný registr pomocí aktuálního posunu prologue. Vyplní také pole registru rámečku a posun v informacích o odvíjení.
Posun musí být násobek 16 a menší nebo roven 240.
Note
Ve verzi Unwind verze 1 jsou direktivy po pokynu. Ve verzi 3 unwind jsou direktivy před pokynem.
.SETFRAME musí se zobrazit před pokyny, které popisuje. Tento požadavek je opakem verze 1, kde direktiva dodržuje instrukce.
Příklad pro 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
Epilogue protějšk je . UNSETFRAME.
Viz také
x64 Unwind verze 3 (experimentální)
MASM pro x64 (ml64.exe)
Odkaz na direktivy
Gramatika MASM BNF