.UNSETFRAME

WOD_SET_FPREG 指定的暫存器和偏移量產生一個解轉碼條目,並利用尾聲中的當前偏移量。

語法

.UNSETFRAME Reg偏移

參數

reg
框架指標暫存器為未設定。

offset
偏移移量進入建立框架指標的堆疊框架。

備註

Important

此指令為實驗性質,且可能隨時變動。 啟用 Unwind 版本 3 ml64.exe /unwindv3

.UNSETFRAME 僅在 Unwind 版本 3 中有效。 它是 .SETFRAME。

.UNSETFRAME 僅允許在結語區域內,介於 之間。開始後記。結尾。 這些指令會產生解開的元資料(.xdata.pdata 區段),但不會產生可執行程式碼。
在 Unwind 版本 3 中,必須 .UNSETFRAME 出現在從框架指標暫存器還原堆疊指標的指令 之前
將解碼指令和它們應該解開的程式碼包裝成巨集,是個好習慣,以確保一致。

在 Unwind 版本 3 中,尾聲指令是產生尾聲解碼碼的強制性。 沒有一對的尾聲解捲碼會被釋放 .BEGINEPILOG/.ENDEPILOG

備註

在 Unwind 版本 1 中,指令會出現在對應指令之後。 在 Unwind 版本 3 中,指令出現 在指令之前

unwindv3 範例

; ml64 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
   .pushreg rbp
   push rbp
   .allocstack 010h
   sub rsp, 010h
   .setframe rbp, 0
   mov rbp, rsp
.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
   .beginepilog
   .unsetframe rbp, 0
   mov rsp, rbp
   .freestack 010h
   add rsp, 010h
   .popreg rbp
   pop rbp
   .endepilog
   ret
frmex2 ENDP
_text ENDS
END

另請參閱

x64 Unwind 版本 3(實驗性)
指令參考
.集合框架
.開始後記
MASM BNF 文法