2009-08-18 15 views
5

他のプロセスのメモリをファイルにダンプする妥当な方法を見つけるのが難しいです。広範な検索した後、私は私が望む機能のほとんど*たCodeProjectので素晴らしい記事*を見つけることができました別のプロセスのメモリのバイナリ/ 16進ダンプを作成するには?

Performing a hex dump of another process's memory.これは、権限の問題に対処する良い仕事をして、良い基盤を設定します。

しかし、このユーティリティを使用すると、Clean Notepad.exeやCalc.exeインスタンスなどの小さなプロセスでも、24 MBを超えるダンプファイルが生成され、プロセス自体は20 KB未満で実行されることがわかりました。 TaskManagerに従ってメモリに保存します。

この記事では、恐らく共有メモリ、おそらくDLL空間などに物を投げ捨てていると私は思っています。例えば、CALC.EXEのダンプは、Kernel32.dllのからメソッド名(およびおそらくメモリ)が含まセクションが含まれます:

²³´µKERNEL32.dll ActivateActCtx AddAtomA AddAtomW AddConsoleAliasA AddConsoleAliasW AddLocalAlternateComputerNameA AddLocalAlternateComputerNameW AddRefActCtx AddVectoredExceptionHandler AllocConsole AllocateUserPhysicalPages AreFileApisANSI AssignProcessToJobObject AttachConsole BackupRead BackupSeek BackupWrite BaseCheckAppcompatCache BaseCleanupAppcompatCache 

をdoesnの別のプロセスのメモリをダンプするためのより良い方法はありますこのオーバーヘッドにつながるのか、おそらくこの問題を解決するリンクされた記事のコードを改善したのでしょうか?私は実際にプロセス自体に属するメモリを取得したい。 DLLで実際に使用されている関数のメモリ空間をダンプするのは問題ありませんが、複数のDLLの*全体の内容をダンプしてプロセスの実行メモリを取得する必要はありません。

私は、30KBプロセスでは30-60KB、25MBではなく30KBプロセスを取得する方法を探しています。少なくとも私は現在入手できるよりも近くにいる。

事前にお寄せいただきありがとうございます。

注:これはコンソールユーティリティのため、CodeProjectの記事のようなGUI要素は重要ではありません。

答えて

3

あなたは基本的にユーザープロセスのミニダンプを求めています。 Windows Debug Helperライブラリには、このための準備が整った関数MiniDumpWriteDumpがあります。

MINIDUMP_TYPEパラメーターから関数に渡されるミニダンプに含まれる詳細の量を粗く制御します。最も基本的なものであるMiniDumpNormalは、プロセス内の各スレッドの呼び出しスタックをキャプチャします。他のミニダンプタイプでは、メモリの量は徐々に詳細になります。

MiniDumpWriteDump関数にコールバックを提供し、MINIDUMP_CALLBACK_OUTPUT構造体のフラグをコールバックに設定することによって、ミニダンプに書き込まれる情報の量を細かく制御することもできます。

結果として得られるミニダンプは、WindbgやVisual Studioのようなデバッガを使用してreadにすることも、various functions in the dbghelp.dllライブラリで処理することもできます。

1
本当に

ない「それをプログラムする方法」の答えが、私はPMDumpに走ったとき、それを行うことができますツールを探している間、私はちょうどあなたの質問を見つけました:

http://ntsecurity.nu/toolbox/pmdump/

それは簡単に死にました使い方が簡単で、正しいダンプを作成します(私はちょうどいくつかのプログラムでそれを試しました)。

+0

リンクありがとうございます。 ソースが含まれていればいいと思う=( – KevenK

+0

)著者に連絡することができます。フリーウェアを書いているほとんどの人は、自分のプログラムが役に立ったら助けて協力してくれるでしょう。 –

関連する問題