填充帧注册字段和扭曲在展开信息使用指定的寄存器 (reg) 和扭曲 (offset)。偏移量必须是 16 的倍数,且小于或等于 240。使用当前 (偏移量,此指令还会生成 UWOP_SET_FPREG 展开指定注册的代码项。
.SETFRAME reg, offset
备注
.SETFRAME 允许 ml64.exe 用户指定框架功能如何展开和在序言中只允许,从 PROC 帧声明扩展到 .ENDPROLOG 指令。这些指令不生成代码;它们只生成 .xdata 和 .pdata。.SETFRAME 应在实际实现将展开的事件的命令之后。最好包装展开指令及其在宏被视为展开确保协议的代码。
有关更多信息,请参见 x64 (ml64.exe) MASM。
示例
说明
下面的示例演示如何使用帧指针:
代码
; 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