Compartir a través de


.SETFRAME

Rellena el campo de registro del marco y el desplazamiento en la información de desenredado con el registro (reg) y el desplazamiento (offset) especificados. El desplazamiento debe ser un múltiplo de 16 y menor o igual que 240. Esta directiva también genera una entrada de código de desenredado UWOP_SET_FPREG para el registro especificado mediante el desplazamiento del prólogo actual.

Sintaxis

. SETFRAME reg, offset

Comentarios

.SETFRAME permite que los usuarios de ml64.exe especifiquen cómo se desenreda una función de marco, lo que solo se permite dentro del prólogo, que se extiende desde la declaración PROC FRAME hasta la directiva .ENDPROLOG. Estas directivas no generan código; solo generan .xdata y .pdata. .SETFRAME debe ir precedido de instrucciones que implementen realmente las acciones que se van a desenredar. Se recomienda ajustar las directivas de desenredado y el código que van a desenredar en una macro para garantizar que se cumple el contrato.

Para más información, consulte MASM para x64 (ml64.exe).

Ejemplo

Descripción

En el ejemplo siguiente se muestra cómo usar un puntero de marco:

Código

; 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

Consulte también

Referencia de directivas
Gramática BNF de MASM