.SETFRAME
使用指定的緩存器(reg)和位移(offset)填入框架緩存器欄位,並在回溯資訊中位移。 位移必須是 16 的倍數,且小於或等於 240。 這個指示詞也會使用目前的序言位移,為指定的緩存器產生 UWOP_SET_FPREG
回溯程式代碼專案。
語法
.SETFRAME reg, offset
備註
.SETFRAME 可ml64.exe使用者指定框架函式回溯的方式,而且只能在序言中允許,該序言會從 PROC FRAME 宣告延伸至 。ENDPROLOG 指示詞。 這些指示詞不會產生程序代碼;它們只會產生 .xdata
和 .pdata
。 .SETFRAME 前面應該有實際實作要解除之動作的指示。 最好包裝回溯指示詞,以及它們打算在巨集中回溯的程序代碼,以確保合約。
如需詳細資訊,請參閱適用於 x64 的 MASM(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