Visual C++ ランタイムによって x64 で C++ 例外処理がどのように実装されているかを理解しようとしています。
http://www.nynaeve.net/?p=110にあるx64 での SEH 実装に関する Nynaeve ブログを読むと、RtlUnwindExは、フレーム統合アンワインドのために ExceptionCode を STATUS_UNWIND_CONSOLIDATE に設定して RtlRestoreContext を呼び出しているようです。
私には完全に明確ではないのは、RtlRestoreContext が次に何をするかということです。MSDN はhttp://msdn.microsoft.com/en-us/site/ms680605で次のように述べています。「RtlRestoreContext は、コールバック関数を呼び出す前に、そのフレームとコンテキスト レコードで指定されたフレームとの間の呼び出しフレームを統合します。これにより、例外からフレームが隠されます。コールバック関数で発生する可能性のある処理。」
「そのフレームとコンテキスト レコードで指定されたフレームとの間の呼び出しフレームを統合する」とはどういう意味ですか? これはどのように「コールバック関数で発生する可能性のある例外処理からフレームを隠す」のですか? 「フレーム統合」とは何を意味し、フレームが統合されている正確な場所はどこですか?
C++ キャッチ ハンドラーが RtlRestoreContext によって呼び出され、別の例外がスローされたとします。その (再) スローされた例外は、ある種の SEH ブロックによって保護されていますか? または、このフレーム統合ビジネスは何とかそれを処理しますか? はいの場合、どのように?