Udostępnij za pośrednictwem


.SETFRAME

Wypełnia ramkę zarejestrować pola i przesunięcie w informacji unwind przy użyciu określonego rejestru (reg) i przesunięcia (offset).Przesunięcie musi być wielokrotnością 16 i mniej niż 240.Niniejsza dyrektywa również generuje UWOP_SET_FPREG relaks wejścia kodu dla określonego rejestru przy użyciu bieżącego przesunięcie prologu.

.SETFRAME reg, offset

Uwagi

.SETFRAME pozwala użytkownikom ml64.exe do określania sposobu odkręcania funkcji ramki i jest dozwolony tylko w prologu, która rozciąga się od PROC deklarację ramki do .ENDPROLOG dyrektywy.Dyrektywy te nie generują kod; tylko generowania .xdata i .pdata..SETFRAME powinien być poprzedzony instrukcje, które faktycznie realizacji działań, które mają być zwiniętej.Jest dobrą praktyką jest zawijany zarówno dyrektyw unwind i kodu, które są przeznaczone do unwind w makrze do zapewnienia umowy.

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

Próbki

Opis

Poniższy przykład pokazuje, jak za pomocą 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ż

Inne zasoby

Odwołania do dyrektyw