巻き戻し手順から
RIP がエピローグ内にあるかどうかを判断するために、RIP からのコード ストリームが調べられます。セクション CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQAOQA2ADAAOQAyADQAMgA1AAAA REF _Ref496092425 \r \h 0 で説明されているように、そのコード ストリームが正当なエピローグの末尾部分と一致する場合、それはエピローグにあり、エピローグの残りの部分はコンテキスト レコードでシミュレートされます。各命令が処理されるたびに更新されます
、およびProlog と Epilogから(理解を深めるために記事全体をお勧めします)
これらは、エピローグの唯一の正当な形式です。これは、add RSP,constant または lea RSP,constant[FPReg] のいずれかで構成され、その後に一連の 0 個以上の 8 バイト レジスタ ポップと return または jmp が続く必要があります。(エピローグでは jmp ステートメントのサブセットのみが許可されます [...])。他のコードは表示できません。特に、戻り値のロードを含め、エピローグ内では何もスケジュールできません。
フレーム ポインターが使用されていない場合、エピローグは add RSP,constant を使用して、スタックの固定部分の割り当てを解除する必要があることに注意してください。代わりに lea RSP,constant[RSP] を使用しない場合があります。この制限が存在するのは、アンワインド コードがエピローグを検索するときに認識するパターンが少ないためです。
コードがそのような状況に陥った場合、現在実行されているコードでそれらの特定の命令をチェックし、一致した場合、それ自体がエピローグにあると見なすようです。