Udostępnij za pośrednictwem


.SETFRAME

Wypełnia pole rejestru ramki i przesunięcie w informacjach odwijanych przy użyciu określonego rejestru (reg) i przesunięcia (przesunięcie). Przesunięcie musi mieć wielokrotność 16 i mniejsze niż lub równe 240. Ta dyrektywa generuje również wpis kodu odwijanego UWOP_SET_FPREG dla określonego rejestru przy użyciu bieżącego przesunięcia prologu.

Składnia

. SETFRAME reg, przesunięcie

Uwagi

. FUNKCJA SETFRAME umożliwia użytkownikom ml64.exe określenie sposobu odwijania funkcji ramki i jest dozwolone tylko w prologu, który rozciąga się od deklaracji PROC FRAME na wartość . ENDPROLOG , dyrektywa. Te dyrektywy nie generują kodu; generują .xdata tylko wartości i .pdata. . ELEMENT SETFRAME powinien być poprzedzony instrukcjami, które faktycznie implementują akcje, które mają być niezauczone. Dobrym rozwiązaniem jest zawijanie zarówno dyrektyw odwijania, jak i kodu, który mają na celu odwinięcie makra w celu zapewnienia porozumienia.

Aby uzyskać więcej informacji, zobacz MASM for x64 (ml64.exe).

Przykład

opis

W poniższym przykładzie pokazano, jak używać wskaźnika ramki:

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

Zobacz też

Odwołanie do dyrektyw
Gramatyka MASM BNF