Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengisi bidang register bingkai dan offset dalam informasi unwind menggunakan register (reg) dan offset yang ditentukan (offset). Offset harus kelipatan 16 dan kurang dari atau sama dengan 240. Arahan ini juga menghasilkan UWOP_SET_FPREG entri kode unwind untuk register yang ditentukan menggunakan offset prolog saat ini.
Sintaks
.SETFRAMEreg, offset
Keterangan
Gunakan .SETFRAME untuk menentukan bagaimana fungsi bingkai melepas lelah. Anda hanya dapat menggunakannya dalam prolog, yang meluas dari PROCFRAME deklarasi ke . Direktif ENDPROLOG. Arahan ini menghasilkan metadata unwind (.xdata dan .pdata bagian) tetapi tidak menghasilkan kode yang dapat dieksekusi. Awali .SETFRAME dengan instruksi yang mengimplementasikan tindakan yang akan dibatalkan. Untuk memastikan perjanjian, bungkus arahan unwind dan kode yang dimaksudkan untuk melepas lelah dalam makro.
Sampel
Deskripsi
Contoh berikut menunjukkan cara menggunakan penunjuk bingkai:
Kode
; 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
Melepas penat perilaku Versi 3
Important
Dukungan Unwind Versi 3 bersifat eksperimental dan dapat berubah. Aktifkan dengan menggunakan ml64.exe /unwindv3.
Di Unwind Versi 3, .SETFRAME memancarkan WOD_SET_FPREG entri kode unwind untuk register yang ditentukan menggunakan offset prolog saat ini. Ini juga mengisi bidang register bingkai dan offset dalam informasi unwind.
Offset harus kelipatan 16 dan kurang dari atau sama dengan 240.
Note
Di Unwind Versi 1, arahan datang setelah instruksi. Di Unwind Versi 3, arahan datang sebelum instruksi.
.SETFRAME harus muncul sebelum instruksi yang dijelaskannya. Persyaratan ini adalah kebalikan dari Versi 1, di mana arahan mengikuti instruksi.
Contoh untuk 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
add rsp, 010h
pop rbp
ret
frmex2 ENDP
_text ENDS
END
Rekan epilog adalah . UNSETFRAME.
Lihat juga
x64 Unwind Versi 3 (eksperimental)
MASM untuk x64 (ml64.exe)
Referensi arahan
Tata Bahasa MASM BNF