-2

最近、Windows ドライバーの開発を開始しました。実際にドライバーをどのようにデバッグするのか疑問に思っています。私が持っているセットアップは->ホストとしてWin7、VMwareのゲストとしてXPで、シリアルポートを介してデバッグしています。

私が行った研究:

私が話していることはほとんどありません

デバッガーが単一の OS でどのように機能するかは既に知っています。その場合、デバッガーも同じ OS 上にあるため、どのプロセスが実行されているかがわかります。それは理解できます。しかし、ここでは、デバッガーはまったく異なる OS、まったく異なる環境上にあります。私は言うだけfile->open source filesで、ブレークポイントを設定できます!! さらに、ドライバーをロードすると、実際に壊れます。なぜ../どのように?thisXPのカーネルは、ドライバーのソースコードがあることをどのように認識しますか(ドライバーはカーネルの拡張機能であり、少なくともWDMであり、WDKについては知りません) 。そしてそれもその制御(環境)外ですか?つまり、ブレークポイントを使用して 10 個のファイルを開くことができますが、それは美しく機能し、失敗したりだますことはできません。

つまり、私が考えているのは、Win7 の windbg にソースを追加するたびに、そのソースからバイナリが作成され、XP がバイナリをロードするたびに、windbg が待機しているバイナリであるかどうかがチェックされるということです。上記のリンクで紛らわしいのは、Vikrant が、デバッガーがカーネル (XP) にプロセスをデバッグする意思があるかどうかを尋ねていると言っているということですname or id。 . ソース コードがありますが、300 個のファイルからビルドされたドライバーがあり、windbg でおそらく最も単純なファイルが 1 つだけ開いている場合を考えてみてください。

4

2 に答える 2

1

@Kjelllの答えは正しいです。コメントへの説明を含む完全なシナリオは次のとおりです。

  1. PDB ファイルには行情報があります。これは、各 (ファイル、行) の場所からアドレス (RVA - 相対仮想アドレス) へのマッピングです。
  2. ソース ファイルにブレーク ポイントを設定すると、WinDBG は、このソース ファイルが現在のアドレスに対応しているかどうかをチェックします。そうであれば、ブレークポイントを設定します。それ以外の場合は、「将来のブレークポイント」になります (Microsoft がこの用語を使用しているかどうかは不明です)。
  3. 新しいバイナリが読み込まれると、クライアントのエージェントがホストと通信し、バイナリについて通知します。この時点で、WinDBG は PDB ファイルの割り当てを試みます。
  4. WinDBG は、ファイル内に埋め込まれた PDB の場所から開始します。この値は、次のコマンド ラインを使用して確認できますwindbg -dump -pdbpath xxx.sys。これは、パス上になくてもWinDBGがシンボルファイルを見つける方法を説明するはずです.sympathy(Kjellへのコメントに答えると思います)。
  5. 次に、WinDBG は .sympathy を検索します。
  6. シンボルが見つかると、将来のすべてのブレークポイントが調べられ、該当する場合は実際のブレークポイントが設定されます。
于 2013-10-12T19:09:42.660 に答える
0

あなたのリンクはあなたの質問をかなりよく説明していると思いますが、おそらくpdbのメカニズムがデバッガーに対して何をするのか理解していないでしょう. ホスト OS の windbg は、pdb ファイルを使用して、ソース ファイルの行番号をゲスト OS (xp) のアドレスに変換します。次に、デバッガ エージェントはこのアドレスを使用して、ゲスト OS にブレーク ポイント (Int 3) を設定します。これは、ローカル デバッガがローカル プロセスに対して行うのとほぼ同じ方法です。

于 2013-10-09T19:02:33.300 に答える