.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

Siehe auch

Direktivenreferenz
MASM BNF Grammatik