Mona に簡易デバッグサポートを実装しよう

経緯

Music Player で変数が書き換わる謎現象が発生。
原因を探るためにCPUの提供するデバッグ機能を実装する。

方針

本格的なデバッグサポートではなく最小サポートにとどめる。
今回のバグを解決するための能力を備えていればよし。

実装する機能

まずは実装しようとする機能を列挙してみるか。

  • リニアアドレスを指定してハードウェアブレークポイント指定
  • 現状サポートするのは DR0 1つで良い
  • そのアドレスに関して読み書きが発生した場合に以下のアクションを起こす
    • 細かいアクセス情報を表示
      • read/write どちらか?
      • レジスタ
      • プロセス名
      • スレッドID
    • そのまま実行を続行
  • ハードウェアブレークポイントを解除

こんなものかな。

できた。