Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Belirtilen yazmaç (reg) ve uzaklık (uzaklık) kullanarak geri sarma bilgilerinde çerçeve yazmaç alanını ve uzaklığı doldurur. Uzaklık 16'nın katı ve 240'tan küçük veya buna eşit olmalıdır. Bu yönerge ayrıca geçerli prologue uzaklığını kullanarak belirtilen kayıt için bir UWOP_SET_FPREG geri sarma kodu girişi oluşturur.
Sözdizimi
.SETFRAMEreg, offset
Açıklamalar
Çerçeve işlevinin nasıl geri sarılacağını belirtmek için kullanın .SETFRAME . Bunu yalnızca bildiriminden PROCFRAME öğesine genişleten prologue içinde kullanabilirsiniz . ENDPROLOG yönergesi. Bu yönergeler geri sarma meta verileri (.xdata ve .pdata bölümleri) oluşturur ancak yürütülebilir kod üretmez.
.SETFRAME Kaldırılacak eylemleri uygulayan yönergelerin önüne geçin. Sözleşmeyi güvence altına almak için hem unwind yönergelerini hem de bir makroda geri sarmalamaları gereken kodu sarmalayın.
Örnek
Açıklama
Aşağıdaki örnekte çerçeve işaretçisinin nasıl kullanılacağı gösterilmektedir:
Kod
; 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
Sürüm 3'e geri sarma davranışı
Important
Sürüm 3'e geri sarma desteği deneyseldir ve değiştirilebilir. kullanarak ml64.exe /unwindv3etkinleştirin.
Sürüm 3'te, .SETFRAME geçerli prologue uzaklığını kullanarak belirtilen yazmaç için bir WOD_SET_FPREG geri sarma kodu girdisi yayar. Ayrıca, geri sarma bilgilerinde çerçeve yazmaç alanını ve uzaklığı doldurur.
Uzaklık 16'nın katı ve 240'tan küçük veya buna eşit olmalıdır.
Uyarı
Unwind Sürüm 1'de yönergeler yönergeden sonra gelir. Sürüm 3'te, yönergeler yönergeden önce gelir.
.SETFRAME açıklandığı yönergeden önce görünmelidir. Bu gereksinim, yönergenin yönergeyi izlediği Sürüm 1'in tersidir.
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
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
En son muadili ise . UNSETFRAME.
Ayrıca bkz.
x64 Sürüm 3'i geri sarma (deneysel)
x64 (ml64.exe) için MASM
Yönergeler başvurusu
MASM BNF Dil Bilgisi