現在のエピローグ オフセットを使用して、指定したレジスタとオフセットの WOD_SAVE_NONVOL または WOD_SAVE_NONVOL_FAR アンワインド コード エントリを生成します。
Syntax
.RESTOREREGreg、 offset
パラメーター
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 文法