為 WOD_SET_FPREG 指定的暫存器和偏移量產生一個解轉碼條目,並利用尾聲中的當前偏移量。
語法
.UNSETFRAMEReg, 偏移
參數
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