2015-08-28 7 views
5

मेरे पास एक निष्पादन योग्य फ़ाइल है, और एक गकोर है।वर्चुअल मेमोरी और कोर डंप के बीच संबंध

मैंने कोर डंप फ़ाइल को गकोर के साथ बनाया है।

अब, मैं निष्पादन योग्य फ़ाइल के वर्चुअल पते को कोर डंप पर मैप करना चाहता हूं।

मुझे पता है कि कोर डंप निष्पादन योग्य फ़ाइल का मेमोरी डंप है, और यदि मैं कोर डंप से वर्चुअल एड्रेस का विश्लेषण करना चाहता हूं। क्या मुझे लगता है कि वर्चुअल एड्रेस 0x0000 कोर डंप के 0x0000 ऑफसेट करने के बराबर है?

उत्तर

3

मुझे पता है कि कोर डंप एक निष्पादन योग्य फ़ाइल की स्मृति डंप है,

सं gdb में एक कोर डंप (gcore आप इस का उपयोग कर रहे इंगित करता है) ELF प्रारूप में आम तौर पर है, इसलिए एक विस्तृत हेडर निर्धारित करता है कि मानचित्र क्या है।

मुझे यकीन नहीं है कि कोर डंपिंग करते समय पता स्थान मैंगलिंग के जीडीबी/लिनक्स का कितना उपयोग होता है, लेकिन आप यह नहीं मान सकते कि फ़ाइल ऑफसेट एक्स स्मृति ऑफसेट एक्स पर मैप करेगा - क्योंकि आभासी पता स्थान विशाल हो सकता है पता स्थान, जिसमें से केवल कुछ पेजों का उपयोग करता है। (उदाहरण के लिए, 64 बिट प्रक्रिया में वर्चुअल एड्रेस स्पेस हो सकता है जो आपके हार्ड ड्राइव से कहीं अधिक बड़ा होता है, जबकि यह वास्तव में केवल स्मृति को आरक्षित कर सकता है जो कि बहुत छोटा है, और यहां तक ​​कि, सभी पृष्ठों को वास्तव में आवंटित करने की आवश्यकता नहीं है)।

हालांकि, जीडीबी इन शीर्षकों को पढ़ सकता है और यदि आप इसे प्रिंट करने के लिए कहते हैं (उदाहरण के लिए print या x कमांड का उपयोग करके), तो यह आपको सही चीज़ देगा।

यदि आप कोर डंप फ़ाइल को पढ़ना चाहते हैं, तो ऐसा करने के लिए जीडीबी की क्षमताओं का उपयोग करना सही है। सौभाग्य से, libgdb है, जो आपके सी/सी ++ एप्लिकेशन के लिए बिल्कुल ठीक है। यह मूल रूप से आप जीडीबी के साथ बात करते हैं जैसे कि आप उपयोगकर्ता जीडीबी खोल के सामने बैठे थे। इसलिए, यह पता लगाएं कि जीडीबी में आप जो चाहते हैं उसे कैसे करें, और फिर इसे प्रोग्रामेटिक रूप से करने के लिए libgdb का उपयोग करें।

यदि आप इसे कम करना चाहते हैं (ऐसा न करें, यह एक परेशानी है, और वास्तव में जीडीबी वास्तव में आप क्या उपयोग करना चाहते हैं) तो आप सीधे पार्स और कोर डंप का प्रतिनिधित्व करने के लिए Binary File Descriptor Library का उपयोग कर सकते हैं। यह जीडीबी का एक अनिवार्य हिस्सा है, और इसे अपने स्वयं के सी ++ कार्यक्रम के साथ चलाने के लिए बहुत मुश्किल होगा बिना जीडीबी रूटीन को फिर से कार्यान्वित किए।

+0

क्या आप सी ++ से कोर डंप में वर्चुअल एड्रेस डेटा पढ़ने के किसी भी तरीके से जानते हैं? –

+0

@ जॉन डॉयले: मेरे उत्तर में संशोधन देखें। –

+0

बहुत बहुत धन्यवाद! आप एक नायक हो! :) –

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