チェーン アンワインド情報の構造

更新 : 2007 年 11 月

UNW_FLAG_CHAININFO フラグを設定している場合、アンワインド情報構造は二次的な情報になります。また、アンワインド情報構造には、基本アンワインド情報を指す RUNTIME_FUNCTION エントリを指す共有例外ハンドラまたはチェーン情報アドレス フィールド内のイメージ相対ポインタが含まれています。

チェーン情報は、次の 2 つのシナリオで役立ちます。1 つは、非連続のコード セグメントで使用する場合です。チェーン情報を使用すると、基本アンワインド情報からアンワインド コード配列を複製する必要がないため、必要なアンワインド情報のサイズを削減できます。

もう 1 つは、チェーン情報を揮発性レジスタの保存のシュリンクラッピングを処理するために使用する場合です。コンパイラが、関数のエントリのプロローグの範囲の外側まで、揮発性レジスタの保存を遅延するように設定する場合があります。これを記録するには、シュリンクラッピングされたコードの前に関数部分の基本アンワインド情報を置き、次に 0 以外のサイズのプロローグを持つチェーン情報を設定します。この場合、チェーン情報のアンワインド コードは、不揮発性レジスタの保存を反映します。その場合には、アンワインド コードは、すべて UWOP_SAVE_NONVOL のインスタンスになります。PUSH を使用して不揮発性レジスタを保存するシュリンクラッピングは、サポートされていません。また、追加の固定スタック割り当てを行って RSP を変更するシュリンクラッピングもサポートされていません。

UNW_FLAG_CHAININFO セットを持つ UNWIND_INFO 項目が、その UNWIND_INFO 項目にも UNW_FLAG_CHAININFO セットがある RUNTIME_FUNCTION エントリを指すことができます (複数シュリンクラッピング)。最終的に、チェーン アンワイド情報ポインタをたどると、UNW_FLAG_CHAININFO がクリアされた UNWIND_INFO 項目に到達します。この項目は、実際のプロシージャのエントリ ポイントを指す主要な UNWIND_INFO 項目です。

参照

参照

例外処理とデバッガ サポートのためのアンワインド データ