現在、別のプロセスからクラッシュしたプロセスのメモリ ダンプを取得できるメモリ ダンプ ツールを設計しようとしています。しかし、私はこれにまったく慣れていないので、これを機会として、メモリ ダンプの手法をしっかりと理解したいと思います。
クラッシュしたプロセスのメモリ ダンプを作成する作業パラダイムを知りたいです。私の現在の野生の想像力は以下のようなものです:
プロセスがクラッシュすると、オペレーティング システムは常にそれを認識します (方法はわかりませんが、できるはずです)。その後、OS は何らかのメカニズムを起動して、クラッシュしたプロセスの仮想アドレス空間の内容をいわゆるダンプ ファイルにコピーしました。次に、WinDbg を使用してダンプ ファイルをデバッグできます。
クラッシュしたプロセスの仮想アドレス空間全体をダンプ ファイルにコピーできるとしたら、ファイルが大きすぎないのでしょうか。または、ダンプする仮想アドレス空間 (カーネル/ユーザー) を指定できますか?
特に次の側面について、私が最初に始めるための参考文献を誰かに提供してもらえますか。
メモリダンプとは?
いわゆるカーネル ダンプとユーザー モード ダンプがある場合、それらは何ですか?
Windows プラットフォームでは、どの API が必要ですか? MiniDumpWriteDump()などの関数は関係がありますか?
OS が特定のプロセスのクラッシュを検出した場合、ダンプ ツールにダンプの開始を通知するために監視できる信号はありますか?
私の言葉を見てくれてありがとう。
追加1:
(5) ミニダンプとは? カーネル/ユーザー モードのダンプとの関係は?
(6)メモリダンプについて話すとき、どのメモリについて話しているのですか? 仮想メモリまたは物理メモリ? この写真から、物理メモリだと思います。
ADD2:
DbgHelp.dll に含まれる API を使用した MiniDump の記述に関する参考文献を見つけました。シェアしたいと思います。これに関連する他の優れた資料を提供できる場合は、共有していただけませんか? ありがとう。
(ところで:私はこのスレッドを自分の進捗状況で更新し続けます。コメントをいただければ幸いです。)