2

現在、別のプロセスからクラッシュしたプロセスのメモリ ダンプを取得できるメモリ ダンプ ツールを設計しようとしています。しかし、私はこれにまったく慣れていないので、これを機会として、メモリ ダンプの手法をしっかりと理解したいと思います。

クラッシュしたプロセスのメモリ ダンプを作成する作業パラダイムを知りたいです。私の現在の野生の想像力は以下のようなものです:

プロセスがクラッシュすると、オペレーティング システムは常にそれを認識します (方法はわかりませんが、できるはずです)。その後、OS は何らかのメカニズムを起動して、クラッシュしたプロセスの仮想アドレス空間の内容をいわゆるダンプ ファイルにコピーしました。次に、WinDbg を使用してダンプ ファイルをデバッグできます。

クラッシュしたプロセスの仮想アドレス空間全体をダンプ ファイルにコピーできるとしたら、ファイルが大きすぎないのでしょうか。または、ダンプする仮想アドレス空間 (カーネル/ユーザー) を指定できますか?

特に次の側面について、私が最初に始めるための参考文献を誰かに提供してもらえますか。

  1. メモリダンプとは?

  2. いわゆるカーネル ダンプとユーザー モード ダンプがある場合、それらは何ですか?

  3. Windows プラットフォームでは、どの API が必要ですか? MiniDumpWriteDump()などの関数は関係がありますか?

  4. OS が特定のプロセスのクラッシュを検出した場合、ダンプ ツールにダンプの開始を通知するために監視できる信号はありますか?

私の言葉を見てくれてありがとう。


追加1:

(5) ミニダンプとは? カーネル/ユーザー モードのダンプとの関係は?

(6)メモリダンプについて話すとき、どのメモリについて話しているのですか? 仮想メモリまたは物理メモリ? この写真から、物理メモリだと思います。

ADD2:

DbgHelp.dll に含まれる API を使用した MiniDump の記述に関する参考文献を見つけました。シェアしたいと思います。これに関連する他の優れた資料を提供できる場合は、共有していただけませんか? ありがとう。

ところで:私はこのスレッドを自分の進捗状況で更新し続けます。コメントをいただければ幸いです。

4

1 に答える 1

6

なぜこれを自分で行うのですか?これを行うツールはすでにたくさんあります。Debugging Tools for Windowsには adplus が含まれており、sysinternalsの ProcDump はどちらもこれを行うことができます。どちらも豊富なオプションをサポートしており、徹底的にテストされています。どちらも無料です。

他の質問について:

1) メモリ ダンプは、特定のプロセスのメモリ空間のダンプです。さまざまな詳細レベルのさまざまなダンプがあります。WinDbg のヘルプ ファイルに詳細がすべて記載されています。

2) ユーザー アプリケーションの場合、カーネル ダンプは必要ありません。カーネル ダンプは、カーネル モード コード (つまり、ドライバーと OS 自体) をデバッグするために使用されます。

3) dbgeng.dll (Debugging Tools for Windows に含まれています) を使用してユーザー モード ダンプを作成できますが、既に述べたように、既存のツールを最初に検討する必要があります。

4) Windows は構造化された例外処理を使用するため、クラッシュは基本的に未処理の例外です。デバッガーは、1 回目と 2 回目の例外の両方について通知を受けることができるため、例外が発生したときや例外ハンドラーが使用できないときにダンプを作成できます。

于 2010-11-02T08:06:04.433 に答える