私は現在、実行時にマシン コードを生成する C++ でコンパイラを作成しようとしています。ただし、現在、安全な例外処理 (/SAFESEH でコンパイル) を有効にしようとしています。カスタム例外ハンドラはデバッグ モードで動作していますが、同じコードをリリース モードで実行すると、プロセスが終了してしまいます。
/SAFESEH:NO を使用してコードをコンパイルすると、リリース モードでもすべて正常に動作するため、カスタム例外ハンドラーをそのまま登録できないことが問題であると確信しています。
私のカスタム例外ハンドラーは私の他の C++ コードで記述されており、内容を含む .asm ファイルをプロジェクトに追加することで例外ハンドラーとして登録しようとしました。
.386
.model flat
_MyExceptionHandler@16 proto
.safeseh _MyExceptionHandler@16
end
ここで説明されているように。次に、asm ファイルが /safeseh オプション (とりわけ) を使用してアセンブルされました。
私のハンドラー関数には現在、次の宣言があります。
extern "C" EXCEPTION_DISPOSITION __stdcall MyExceptionHandler(struct
_EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct
_CONTEXT *ContextRecord, void * DispatcherContext);
この関数を例外ハンドラとして登録する正しい方法は何ですか?
ご提案ありがとうございます。