さまざまなツールを使用して、プロセスのメモリ空間全体を簡単にダンプできます。
しかし、何らかのプロセスによってロードされた DLL によって使用されるメモリ空間だけをダンプすることは可能ですか? どのツールを使用すればよいですか?
ありがとう、
ジム
おそらく、DLL 内のコードによって割り当てられたメモリを確認することを意味します。
これは不可能だと思います。DLL がメモリを割り当て、DLL が C++ で記述され、C/C++ ランタイムが動的にリンクされている (つまり、DLL として) 場合、メイン アプリケーションと同じ C/C++ ランタイムが使用され、すべての DLL が割り当てられます。メモリは同じヒープに割り当てられます。
DLL に C/C++ ランタイムが静的にリンクされている場合や、DLL が別の言語で記述されている場合でも、おそらく同じ既定の Windows ヒープが使用されます。
自分で DLL を制御できる場合は、DLL 用のカスタム メモリ マネージャーを実装してみることができます (C++ では、new と delete の合計 6 つのグローバル オペレーターをオーバーライドすることを意味します)。ヒープ、および低レベルの Windows デバッガー WinDbg の heapwalk メソッドを使用しますが、これをすべて機能させるのは非常に困難です。または、DLL のカスタム メモリ マネージャーが、VirtualAlloc を使用して固定アドレスにメモリを割り当てることができます (または固定されていない場合は、仮想アドレスをログに記録します)。その後、通常のプロセス メモリ ダンプでこのアドレス空間を確認できます。