.SETFRAME
Füllt das Feld für das Rahmenregister und den Offset in den Entspanninformationen mithilfe des angegebenen Registers (reg) und offset (Offset). Der Offset muss ein Vielfaches von 16 und kleiner oder gleich 240 sein. Diese Direktive generiert auch einen UWOP_SET_FPREG
Entspanncodeeintrag für das angegebene Register mithilfe des aktuellen Prolog-Offsets.
Syntax
. SETFRAME reg, offset
Hinweise
. SETFRAME ermöglicht es ml64.exe Benutzern anzugeben, wie sich eine Framefunktion ablöst und nur innerhalb des Prologs zulässig ist, der sich von der PROC FRAME-Deklaration auf die . ENDPROLOG-Direktive . Diese Direktiven generieren keinen Code; sie generieren .xdata
und .pdata
. . SETFRAME sollte Anweisungen vorangestellt werden, die tatsächlich die Aktionen implementieren, um sich zu entwunden. Es empfiehlt sich, sowohl die Entspannrichtlinien als auch den Code, mit dem sie sich in einem Makro entspannen sollen, um eine Einigung sicherzustellen.
Weitere Informationen finden Sie unter MASM für x64 (ml64.exe).
Beispiel
Beschreibung
Das folgende Beispiel zeigt, wie Sie einen Framezeiger verwenden:
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