.RESTOREREG

現在のエピローグ オフセットを使用して、指定したレジスタとオフセットの WOD_SAVE_NONVOL または WOD_SAVE_NONVOL_FAR アンワインド コード エントリを生成します。

Syntax

.RESTOREREG regoffset

パラメーター

reg
復元する不揮発性レジスタ。

オフセット
レジスタの復元元のスタック オフセット。

注釈

Important

このディレクティブは試験段階であり、変更される可能性があります。 ml64.exe /unwindv3を使用してアンワインド バージョン 3 を有効にします。

.RESTOREREG はアンワインド バージョン 3 でのみ有効です。 これはエピローグに対応する .SAVEREG

Microsoft アセンブラー (MASM) は、特定のオフセットに対して最も効率的なエンコードを選択します。

  • .RESTOREREG はエピローグ領域内でのみ許可されます 。BEGINEPILOG および .ENDEPILOG
  • これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。
  • アンワインド バージョン 3 では、スタックからレジスタを読み込む命令の前に.RESTOREREGが表示される必要があります。
  • アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。
  • アンワインド バージョン 3 では、エピローグ アンワインド コードの生成にはエピローグ ディレクティブが必須です。 エピローグ アンワインド コードは、 .BEGINEPILOG/.ENDEPILOG ペアなしで出力されません。

Note

アンワインド バージョン 1 では、対応する命令の後にディレクティブが表示されます。 アンワインド バージョン 3 では、命令の にディレクティブが表示されます。

unwindv3 の例

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .allocstack 020h
   sub rsp, 020h
   .savereg rbx, 0
   mov [rsp], rbx
   .savereg rsi, 8
   mov [rsp+8], rsi
.endprolog
   ; rest of function ...
   .beginepilog
   .restorereg rsi, 8
   mov rsi, [rsp+8]
   .restorereg rbx, 0
   mov rbx, [rsp]
   .freestack 020h
   add rsp, 020h
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

こちらも参照ください

x64 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
.SAVEREG
.BEGINEPILOG
MASM BNF 文法