2009-08-18 18 views
5

Başka bir işlemin belleğini bir dosyaya dökmenin makul bir yolunu bulmakta zorlanıyorum. Performing a hex dump of another process's memory. Bu iyi bir izin sorunları ele işi ve iyi bir temel ayarlar kapsamaz:Başka bir işlem belleğinin ikili/onaltılık dökümü nasıl oluşturulur?

kapsamlı arama yaptıktan sonra, istediğim işlevi çoğu * etmiştir CodeProject güzel bir makale * bulmak mümkün oldum.

Ancak, bu yardımcı program ile temiz bir Notepad.exe veya Calc.exe örneği gibi küçük bir işlem bile, işlemin kendisi 20 KB'ın altında çalışırken, boyutu 24 MB'ın üzerinde bir döküm dosyası oluşturabildiğini gördüm. TaskManager'a göre bellek. Makale, belki de paylaşılan bellekte, muhtemelen DLL uzayında ve benzerlerinde bir şeyler atıldığına inanmam için bana yol açmıştır.

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

gelmez başka bir işlem bellek dökümü için daha iyi bir yolu vardır: Örneğin, CALC.EXE bir döküm Kernel32.dll yöntem adlarını (ve muhtemelen bellek) içerir bölümler içerecektir Bu ek yüke ya da belki de bu sorunu çözen bağlantılı makalenin kodundaki bir gelişmeye yol açabilir mi? Aslında sürecin kendisine ait olan belleği almak istiyorum. Aslında DLL'lerde kullanılan işlevlerin bellek alanı boşaltma ile tamam olur, ancak işlemin çalışan bellek almak için birden çok DLL * tüm * içeriğini dökmek için gereksiz görünüyor.

30 KB'lik bir işlem için 30MB'lık bir işlemin 25MB'ından ziyade 30-60KB'yi almanın bir yolunu arıyorum. Ya da şu anda alabildiğimden daha yakın.

Öneriniz ve önerileriniz için şimdiden teşekkür ederiz, takdir edilmektedir.

Not: Bu bir konsol yardımcı programı içindir, bu nedenle CodeProject makalesindeki gibi GUI öğeleri önemsizdir.

cevap

3

Temel olarak bir kullanıcı işlemi minidump istiyorsunuz. Windows Hata Ayıklama Yardımcısı kitaplığı bunun için hazır bir işlevi vardır, MiniDumpWriteDump.

Fonksiyona aktarılan MINIDUMP_TYPE parametresinden gelen mini dökümde bulunan ayrıntı miktarı üzerinde kaba bir kontrol var. En basit olan, MiniDumpNormal, yalnızca süreçteki her bir iş parçacığının çağrı yığınını yakalayacaktır. Hafıza miktarı diğer mini damper türleri ile giderek daha ayrıntılı hale gelir.

Ayrıca, MiniDumpWriteDump işlevine bir geri arama sağlayarak ve MINIDUMP_CALLBACK_OUTPUT yapısında bayrakları ayarlamak için geri aramada mini döküm içine yazılacak bilgi miktarını da denetleyebilirsiniz.

Ortaya çıkan mini dökümler, Windbg veya Visual Studio gibi bir hata ayıklayıcı ile read olabilir veya various functions in the dbghelp.dll kitaplığı tarafından işlenebilir.

1
gerçekten

Değil "Bunu nasıl programının" cevabı, ama PMDump karşılaşmaları, bunu yapabilir bir araç ararken ben sadece soru bulundu:

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

Kolay ölü ve kullanımı basit ve doğru dökümler yaratıyor (sadece bazı programlarla denedim).

+0

Bağlantı için teşekkürler. Sadece bağlantıyı içeriyor kaynak = ( – KevenK

+0

İyi, belki de yazarla iletişime geçebilirsiniz. Ücretsiz yazılım yazan çoğu insan, programlarını faydalı bulursanız yardımcı olmaya ve işbirliği yapmaya isteklidir. –

İlgili konular