シングルスレッドプログラムのウォッチドッグを作ろうとしています。問題は、外部の so/dll (コードが利用可能) を実行することです。これは、そこに制御を渡すことを意味します。
アイデアは、一種のキャンセル ルーチンへのコールバックを使用してこれらを再コンパイルすることです。
このコンパイルされた外部コードの C トランザクションまたは asm トランザクションの間で、GCC にいくつかのコールバック関数を呼び出させることは可能ですか?
シングルスレッドプログラムのウォッチドッグを作ろうとしています。問題は、外部の so/dll (コードが利用可能) を実行することです。これは、そこに制御を渡すことを意味します。
アイデアは、一種のキャンセル ルーチンへのコールバックを使用してこれらを再コンパイルすることです。
このコンパイルされた外部コードの C トランザクションまたは asm トランザクションの間で、GCC にいくつかのコールバック関数を呼び出させることは可能ですか?
私が提案しようとしているのはコンパイラーには関係ありませんが、これは実行時に POSIX シグナルを使用して解決できる問題のように思えますptrace
...
IRQ を使用してカーネル モードで発生するのと同様に、シグナルを使用して現在のコンテキストを中断できます。「シグナルセーフ」であることを心配する必要があります (例:データ構造が不確定な状態にある間、ハンドラーはそれ自体をmalloc
中断する可能性があるため、ハンドラーは使用できません)。malloc
を使用ptrace
すると、デバッガーのように別のプロセスで命令をステップ実行できます。
これらは正しく使用するのが難しいメカニズムであり、非常に簡単に自分の足を撃ちます。