.自由書

產生一個 WOD_ALLOC_SMALLWOD_ALLOC_LARGEWOD_ALLOC_HUGE 的解轉程式碼條目,並以尾聲中指定的大小來對應當前偏移量。

語法

。FREESTACK尺寸

參數

大小
從堆疊中釋放的位元組數。 必須是8的倍數。

備註

Important

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

  • 你可以使用 . 僅在 Unwind 版本 3 中支援 FREESTACK。 它是 .ALLOCSTACK。
  • 你可以使用 .FREESTACK 僅在後記區域內,介於 之間。開始後記。結尾
  • 在 Unwind 版本 3 中,FREESTACK 必須 出現在 實作堆疊釋放的指令之前 add rsp, N
  • 為了確保一致,將解碼指令和它們要解開的程式碼都包裝成一個巨集。
  • 這些指令會產生解開的元資料(.xdata.pdata 區段),但不會產生可執行程式碼。
  • Microsoft 組合語言器(MASM)會選擇特定大小下最有效率的編碼方式。

MASM 會根據容量發出三種解帶碼之一:

解纏程式碼 狀況
WOD_ALLOC_SMALL 大小 ≤ 128 位元組
WOD_ALLOC_LARGE 大小 ≤ 32 KB
WOD_ALLOC_HUGE 規模> 32 KB

在 Unwind 版本 3 中,尾聲指令是產生尾聲解碼碼的強制性。 組譯器不會在沒有 .BEGINEPILOG/.ENDEPILOG 一對的組合檔時發出尾聲的解碼。

備註

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

unwindv3 範例

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .allocstack 16
   sub rsp, 16
.endprolog
   ; function body
   .beginepilog
   .freestack 16
   add rsp, 16
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

另請參閱

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