エピローグの現在のオフセットを使用して、指定したレジスタの WOD_PUSH アンワインド コード エントリを生成します。
Syntax
.POPREG レジスタ
パラメーター
register
ポップするレジスタ。 汎用の 64 ビット レジスタである必要があります。
注釈
Important
このディレクティブは試験段階であり、変更される可能性があります。 ml64.exeの /unwindv3 オプションを使用してアンワインド バージョン 3 を有効にします。
.POPREG はアンワインド バージョン 3 でのみ有効です。 これはエピローグに対応する .PUSHREG。
.POPREG はエピローグ領域内でのみ許可されます 。BEGINEPILOG および .ENDEPILOG。 これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。 アンワインド バージョン 3 では、.POPREGは、レジスタの復元を実装するpop命令の前に表示する必要があります。 アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。
register は次のいずれかになります。
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31
アンワインド バージョン 3 では、エピローグ アンワインド コードの生成にはエピローグ ディレクティブが必須です。 アセンブラーは、 .BEGINEPILOG/.ENDEPILOG ペアなしでエピローグ アンワインド コードを出力しません。
Note
アンワインド バージョン 1 では、対応する命令の後にディレクティブが表示されます。 アンワインド バージョン 3 では、命令の 前 にディレクティブが表示されます。
unwindv3 の例
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.pushreg rbx
push rbx
.pushreg rsi
push rsi
.endprolog
; rest of function ...
.beginepilog
.popreg rsi
pop rsi
.popreg rbx
pop rbx
.endepilog
ret
Example1 ENDP
_text ENDS
END
こちらも参照ください
x64 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
.PUSHREG
.POP2REG
.BEGINEPILOG
MASM BNF 文法