2011-04-06 13 views
7

मैं एक प्रक्रिया के लिए वर्चुअल मेमोरी को मैप करने के लिए मार्क रसेलिनोविच के वीएमएपी का उपयोग कर रहा हूं जिसका मैं विश्लेषण कर रहा हूं। VirtualQueryEx का उपयोग करके, मैं बाहरी प्रक्रिया की जगह पर जा सकता हूं और प्रक्रिया के पता स्थान के भीतर मेमोरी क्षेत्रों पर जानकारी प्राप्त कर सकता हूं। ये क्षेत्र निश्चित रूप से वीएमएपी के साथ मेल खाते हैं, लेकिन वर्चुअलQueryएक्स केवल मुझे बताता है कि क्या स्मृति प्रतिबद्ध/आरक्षित/मुक्त है और क्या यह निजी/साझा/छवि है।वीएमएपी एक दिए गए मेमोरी क्षेत्र को कैसे जानता है थ्रेड स्टैक है, विशेष रूप से?

मुझे क्वेरी वर्चुअल मेमोरी क्वेरी करने के लिए कोई अन्य दस्तावेज तरीके नहीं मिल रहा है। वीएमएपी को स्मृति को इस तरह से पूछने का एक तरीका पता है कि यह समझने के लिए कि क्या यह "निजी डेटा" या "थ्रेड स्टैक" है। VirtualQueryEx उन दोनों को लेबल करता है जो MEM_PRIVATE के रूप में हैं। तो वीएमएपी कैसे उस भेद को बनाता है?

क्या कोई और एपीआई फ़ंक्शन है जिसका उपयोग मैं उन विवरणों को जानने के लिए कर सकता हूं?

+0

आप http://stackoverflow.com/questions/3918375/how-to-get-thread-stack-information-on-windows – Adam

उत्तर

6

मार्क रसेलिनोविच कभी भी अपने रहस्य साझा नहीं करता है, उसके पास कई हैं। मुझे लगता है कि यह अनियंत्रित थ्रेड पर्यावरण ब्लॉक से पाया जा सकता है हालांकि मुझे महान उम्मीदवार नहीं दिख रहे हैं। एक बेहतर लीड पृष्ठ विशेषताओं हो सकता है। यह MEM_TOP_DOWN का उपयोग करता है, केवल स्टैक्स में (वर्चुअलअलोक जांचें)। और गार्ड पेज के साथ संयोजन, जो स्टैक ओवरफ्लो एक्सेप्शन की यात्रा करता है, वह इसे पूरी तरह से स्पष्ट बना देगा। वैसे भी मैं वैसे भी करूँगा।

+0

सहमत हो सकते हैं। मैंने लगभग एक समान जवाब हटा दिया जिसे मैंने अभी टाइप करना समाप्त कर दिया था। :) –

+0

मैं स्मृति के ब्लॉक पर पृष्ठ विशेषताओं को कैसे क्वेरी कर सकता हूं? –

+0

वर्चुअलअलोक() और दोस्तों को नहीं देखा? VirtualQuery() का प्रयोग करें। –

0

मुझे संदेह है कि यह अभी जाता है और सभी टीईबी की तलाश करता है। याद रखें कि ProcExp में कर्नेल मोड ड्राइवर है जो इसके अधिकांश डेटा एकत्र करता है। ईप्रोसेस से थ्रेडलिस्ट हेड आपको सभी एथ्रेड/केथ्रेड्स ढूंढने देता है और केथरेड के पास टीईबी का पता है।

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