.SETFRAME
指定 reg 登録 () を使用してアンワインド情報のフレーム レジスタ フィールドとオフセットとオフセット (offset) を入力します。オフセットは 16 の倍数で、240 以下である必要があります。このディレクティブは現在のプロローグ オフセットを使用して UWOP_SET_FPREG アンワインド指定されたレジスタのコード エントリを生成します。
.SETFRAME reg, offset
解説
.SETFRAME は ml64.exe のユーザーがで指定したフレーム関数を呼び出す終了するとPROC フレームの宣言から .ENDPROLOG のディレクティブまでプロローグ内でのみ使用できます。これらのディレクティブはコードを生成しません ; これらは .xdata と .pdata だけを生成します。.SETFRAME はアンワインドされるアクションを実行する方法を指定する必要があります。これは署名を確認するマクロでアンワインドするように指定することもアンワインド コードのディレクティブをラップすることをお勧めします。
詳細については、「x64 用 MASM (ml64.exe)」を参照してください。
サンプル
Description
次の例ではフレーム ポインターを使用する方法を示します :
コード
; 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