. UNSETFRAME

Epilogdaki geçerli uzaklığı kullanarak belirtilen yazmaç ve uzaklık için bir WOD_SET_FPREG geri sarma kodu girişi oluşturur.

Syntax

.UNSETFRAME reg, offset

Parametreler

reg
Çerçeve işaretçisi, kümeyi kaldıracak şekilde kaydeder.

fark
Çerçeve işaretçisinin oluşturulduğu yığın çerçevesine uzaklık.

Remarks

Important

Bu yönerge deneyseldir ve değiştirilebilir. sürüm 3'i ile ml64.exe /unwindv3geri sarmayı etkinleştirin.

.UNSETFRAME yalnızca Geri Sarma Sürüm 3'te geçerlidir. Bu, 'nin en önemli muadili . SETFRAME.

.UNSETFRAME arasında yalnızca en son bir bölgede izin verilir . BEGINEPILOG ve . ENDEPILOG. Bu yönergeler geri sarma meta verileri (.xdata ve .pdata bölümleri) oluşturur ancak yürütülebilir kod üretmez.
Sürüm 3'te, .UNSETFRAME yığın işaretçisini çerçeve işaretçisi yazmaçtan geri yükleyen yönergeden önce görünmelidir.
Sözleşmeyi sağlamak için hem unwind yönergelerini hem de bir makroda geri sarmalamaları gereken kodu sarmak iyi bir uygulamadır.

Unwind Sürüm 3'te, epilogue unwind kod oluşturma için epilog yönergeleri zorunlu hale geldi. Bir çift olmadan .BEGINEPILOG/.ENDEPILOG hiçbir epilogue unwind kodu yayılmaz.

Note

Sürüm 1'i Geri Al bölümünde yönerge ilgili yönergeden sonra görünür. Sürüm 3'te yönerge yönergeden önce görünür.

unwindv3 örneği

; 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

Ayrıca bakınız

x64 Sürüm 3'i geri sarma (deneysel)
Yönergeler Başvurusu
. SETFRAME
. BEGINEPILOG
MASM BNF Dil Bilgisi