.SETFRAME

指定のレジスタ (reg) とオフセット (offset) を使用してアンワインド情報のフレーム レジスタ フィールドとオフセットを設定します。 オフセットは 16 の倍数で、240 以下である必要があります。 また、このディレクティブは、現在のプロローグ オフセットを使用して指定のレジスタに対して UWOP_SET_FPREG アンワインド コード エントリも生成します。

.SETFRAME reg, offset

解説

.SETFRAME により、ml64.exe ユーザーは、フレーム関数のアンワインド動作を指定できます。これは、PROC FRAME 宣言から .ENDPROLOG ディレクティブまでのプロローグ内でのみ指定できます。 これらのディレクティブはコードを生成しません。.xdata および .pdata だけを生成します。 .SETFRAME は、アンワインドされるアクションを実際に実装する命令の後に置かれる必要があります。 不一致が起こらないように、アンワインド ディレクティブとアンワインド対象のコードを 1 つのマクロにラップすることをお勧めします。

詳細については、「x64 用 MASM (ml64.exe)」を参照してください。

サンプル

説明

フレーム ポインターを使用する方法を次のサンプルに示します。

コード

; 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

参照

その他の技術情報

ディレクティブ リファレンス