要件:
メモリの場所が変更されたとき、または書き込まれたときに、割り込みを生成する必要があります。ISRから、メソッド名を含む優れたスタックトレースを提供するブルースクリーンをトリガーできます。
アプローチ:
- タイマーISRの値をテストします。明らかに、これでは満足のいく結果は得られません。
- bochs仮想マシンを発見しました。データブレークポイントを設定してプログラムを停止できる基本的な組み込みデバッガーがあります。しかし、その時点では割り込みを生成できないようです。
- bochsを使用すると、gdbをそれに接続できます。ただし、gdbサポートを使用してビルドすることはできませんでした。
他の考え:
- 実行前にすべての命令に対してトリガーされる一種の「プレビュー命令」割り込み。使用されたメモリ書き込み命令のセットはかなり扱いやすいはずですが、それでもアドレスを抽出するのはPITAだと思います。そして、そのような中断はないと思います。
- 一種の「プレビューメモリアクセス」割り込み。繰り返しますが、私はそこにあるとは思いません。
- ページングを乱用します。対象のページを存在しないものとしてマークし、ページフォールトハンドラーでアドレスをテストします。それでも読み取り操作と書き込み操作を区別する必要があり、ページフォールトハンドラーは正確なアドレスを知ることはできず、ページ番号だけを知ることができると思います。