私が世界最高の Uber ハッカーで、プログラムの動作を監視する必要があるとします。
これを行うには、いくつかのスレッドを作成し、メモリからバイトを読み取るだけの動的ライブラリまたはプログラムを作成します (生のポインターまたは関数を使用しない他の直接メモリ取得モデルを介して)。この「はず」は安全ですか?あなたが得ることができる唯一のものは、不正な変数です(たとえば、読み取り時に書き込みが行われます)?無視して読み直したら?
競合状態、デッドロック、およびマルチスレッドに関連するその他の問題について取り上げているドキュメントを常に目にします。しかし、それらは常に私が望んでいるほど明確であるとは限らず、未回答の質問が残されています.
スレッドがメモリの一部に書き込み、3-4 などの他のスレッドが常にメモリを読み取り (非 std::atomic int または float を想定)、それを使用してスレッドスコープの操作を実行する場合 (速度の計算など)指定された x、y、z ベクトルの)、このプログラムは安全に実行され、定義された動作が発生しますか、または UB が発生するか、またはある時点でアプリケーションがクラッシュする可能性がありますか? (不正な float バイトの乗算がクラッシュを引き起こす可能性がありますか?)
安全でない場合、ターゲットプログラムの内部にアクセスせずに、いくつかのスレッドからメモリの一部からメモリの内容を「安全に」取得する方法はありますか?