2

要件:

メモリの場所が変更されたとき、または書き込まれたときに、割り込みを生成する必要があります。ISRから、メソッド名を含む優れたスタックトレースを提供するブルースクリーンをトリガーできます。

アプローチ:

  • タイマーISRの値をテストします。明らかに、これでは満足のいく結果は得られません。
  • bochs仮想マシンを発見しました。データブレークポイントを設定してプログラムを停止できる基本的な組み込みデバッガーがあります。しかし、その時点では割り込みを生成できないようです。
  • bochsを使用すると、gdbをそれに接続できます。ただし、gdbサポートを使用してビルドすることはできませんでした。

他の考え:

  • 実行前にすべての命令に対してトリガーされる一種の「プレビュー命令」割り込み。使用されたメモリ書き込み命令のセットはかなり扱いやすいはずですが、それでもアドレスを抽出するのはPITAだと思います。そして、そのような中断はないと思います。
  • 一種の「プレビューメモリアクセス」割り込み。繰り返しますが、私はそこにあるとは思いません。
  • ページングを乱用します。対象のページを存在しないものとしてマークし、ページフォールトハンドラーでアドレスをテストします。それでも読み取り操作と書き込み操作を区別する必要があり、ページフォールトハンドラーは正確なアドレスを知ることはできず、ページ番号だけを知ることができると思います。
4

1 に答える 1

7

Intel のSoftware Developer's Manual Volume 3A の第 16 章を参照してください。とりわけ、特定のアドレスにアクセスするときにデバッガー例外を発生させるためのサポートを提供するデバッグ レジスターの使用に関する情報を提供します。割り込みは、それを引き起こした命令の後にトリガーされます。具体的には、dr0 から dr3 のいずれかを監視したいアドレスに設定し、dr7 に適切な値を設定して、割り込みを発生させるアクセスの種類をプロセッサに伝える必要があります。

于 2011-05-08T00:10:46.830 に答える