2009-08-18 11 views
5

मुझे किसी अन्य प्रक्रिया की स्मृति को फ़ाइल में डंप करने का उचित तरीका खोजने में परेशानी हो रही है। Performing a hex dump of another process's memory. यह अनुमति मुद्दों को संबोधित करने का एक अच्छा काम है और एक अच्छा आधारशिला रखती है:किसी अन्य प्रक्रिया की स्मृति के बाइनरी/हेक्स डंप कैसे बनाएं?

व्यापक खोज के बाद, मैं कार्यक्षमता मैं चाहता हूँ की CodeProject कि ज्यादातर * है पर एक अच्छा लेख * खोजने के लिए कर लिया है।

हालांकि, इस उपयोगिता के साथ मैंने देखा है कि क्लीन नोटपैड.एक्सई या कैल्क्सएक्स उदाहरण जैसे एक छोटी सी प्रक्रिया भी 24 एमबी से अधिक डंप फ़ाइल उत्पन्न कर सकती है, जबकि प्रक्रिया स्वयं 20 केबी के तहत चलती है कार्य प्रबंधक के अनुसार स्मृति।

लेख मुझे नेतृत्व को लगता है कि शायद यह भी साझा स्मृति, संभवतः DLL अंतरिक्ष और की तरह में चीजों को डंपिंग कर रहा है।

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

एक और प्रक्रिया है कि नहीं करता है की स्मृति डंप करने के लिए एक बेहतर तरीका है: उदाहरण के लिए, calc.exe की एक डंप वर्गों Kernel32.dll से विधि के नाम (और शायद स्मृति) शामिल है कि शामिल होंगे इस उपरांत का नेतृत्व नहीं कर सकता है, या शायद जुड़े हुए आलेख के कोड पर एक सुधार जो इस समस्या को हल करता है? मैं उस स्मृति को प्राप्त करना चाहता हूं जो वास्तव में प्रक्रिया से संबंधित है। मैं वास्तव में डीएलएल में उपयोग किए जाने वाले कार्यों की स्मृति स्थान को डंप करने के साथ ठीक हूं, लेकिन प्रक्रिया की चल रही स्मृति प्राप्त करने के लिए * एकाधिक डीएलएल की * संपूर्ण * सामग्री को डंप करने के लिए अनावश्यक लगता है।

मैं एक तरह से एक 30KB प्रक्रिया के लिए एक 30KB प्रक्रिया के 30-60KB के बजाय 25 एमबी पाने के लिए देख रहा हूँ। या कम से कम करीब मैं वर्तमान में मिल सकता है।

आपके सुझावों और मार्गदर्शन के लिए अग्रिम धन्यवाद, इसकी सराहना की जाती है।

नोट: यह कंसोल उपयोगिता के लिए है, इसलिए कोडप्रोजेक्ट आलेख में जैसे जीयूआई तत्व महत्वहीन हैं।

उत्तर

3

आप मूल रूप से उपयोगकर्ता प्रक्रिया minidump के लिए पूछ रहे हैं। विंडोज डीबग हेल्पर लाइब्रेरी के लिए तैयार है, MiniDumpWriteDump

समारोह में पारित MINIDUMP_TYPE पैरामीटर से मिनी डंप में मौजूद विवरण की मात्रा पर एक मोटे नियंत्रण है। सबसे बुनियादी, MiniDumpNormal, केवल प्रक्रिया में प्रत्येक थ्रेड के कॉल स्टैक को कैप्चर करेगा। अन्य मिनी डंप प्रकारों के साथ स्मृति की मात्रा क्रमिक रूप से अधिक विस्तृत हो जाती है।

आप MiniDumpWriteDump फ़ंक्शन पर कॉलबैक प्रदान करके मिनी डंप में लिखी जाने वाली जानकारी की मात्रा को भी नियंत्रित कर सकते हैं और कॉलबैक में MINIDUMP_CALLBACK_OUTPUT संरचना पर झंडे सेट कर सकते हैं।

परिणामस्वरूप मिनी डंप read विंडबग या विजुअल स्टूडियो जैसे डीबगर के साथ हो सकते हैं, या उन्हें various functions in the dbghelp.dll लाइब्रेरी द्वारा संसाधित किया जा सकता है।

1
नहीं

वास्तव में एक "यह कार्यक्रम करने के लिए कैसे" जवाब है, लेकिन मैं सिर्फ अपने प्रश्न पाया, जबकि, एक उपकरण है कि कर सकता है कि की तलाश में जब मैं PMDump में भाग:

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

यह मृत आसान है और उपयोग करने में आसान है, और सही डंप बनाता है (मैंने बस कुछ प्रोग्रामों के साथ कोशिश की)।

+0

लिंक के लिए धन्यवाद। मुझे बस लिंक शामिल है स्रोत = ( – KevenK

+0

ठीक है, शायद आप लेखक से संपर्क कर सकते हैं। अधिकांश लोग जो फ्रीवेयर लिखते हैं, यदि आप उनके कार्यक्रम को उपयोगी पाते हैं तो मदद करने और सहयोग करने के इच्छुक हैं। –

संबंधित मुद्दे