.SETFRAME
使用指定寄存器 (reg) 和偏移 (offset) 在展开信息中填充帧寄存器字段和偏移。 偏移必须是 16 的倍数,并且小于或等于 240。 此指令还使用当前序言偏移为指定寄存器生成 UWOP_SET_FPREG
展开代码条目。
语法
.SETFRAME 正则, 偏移量
注解
.SETFRAME 允许 ml64.exe 用户指定帧函数的展开方式,并且仅允许在序言中展开,该序表从 PROC FRAME 声明扩展到 .ENDPROLOG 指令。 这些指令不生成代码;它们仅生成 .xdata
和 .pdata
。 .SETFRAME 前面应有实际实现要撤消的操作的说明。 最好将展开指令和代码包装在宏中,以确保一致。
有关详细信息,请参阅 MASM for x64 (ml64.exe)。
示例
说明
以下示例演示如何使用帧指针:
代码
; 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