2013-05-13 19 views
7

/proc/$pid/maps पर कोई rwx अनुमतियों वाले पृष्ठों को दिखाता है x86_64 linux पर कोई rwx अनुमतियों वाले पृष्ठ दिखाता है। मैंने देखा कि जब मैंने 64 बिट लिनक्स पर /proc/$pid/maps पढ़ा है तो मेरे पास मेमोरी पेज हैं जिनके पास कोई अनुमति नहीं है, लेकिन 32 बिट लिनक्स में, वे वहां नहीं हैं।

मैं अपनी प्रक्रिया के स्मृति उपयोग की निगरानी करने की कोशिश कर रहा हूं, लेकिन मैं उलझन में हूं। कोई आरडब्ल्यूएक्स विशेषाधिकार वाले पृष्ठ क्यों हैं। वे मेरी याददाश्त का उपभोग कर रहे हैं!

यह 'शीर्ष'

% cat /proc/21367/maps 

3154200000-315420d000 r-xp 00000000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 
315420d000-315440d000 **---p** 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 
315440d000-315440e000 rw-p 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so 

कृपया सलाह देने के लिए एक 64 बिट linux के उत्पादन का एक टुकड़ा है।

उत्तर

10

ये मैपिंग साझा पुस्तकालयों के लिए उपयोग किया जाता है:

प्रत्येक शेयर की गई लाइब्रेरी के लिए

सामान्य में लोड हम चार मैपिंग करना होगा:

3b7cc00000-3b7cd86000 r-xp 00000000 fd:00 661350   /lib64/libc-2.12.so 
3b7cd86000-3b7cf86000 ---p 00186000 fd:00 661350   /lib64/libc-2.12.so 
3b7cf86000-3b7cf8a000 r--p 00186000 fd:00 661350   /lib64/libc-2.12.so 
3b7cf8a000-3b7cf8b000 rw-p 0018a000 fd:00 661350   /lib64/libc-2.12.so 

पहले एक निष्पादन योग्य अनुमतियों के साथ कोड खंड है, दूसरा एक PROT_NONE (कोई अनुमति नहीं) मैपिंग, और पिछले दो डेटा सेगमेंट (केवल भाग पढ़ें और लिखें पढ़ें)।

PROT_NONE मैपिंग लाइब्रेरी को कुशलतापूर्वक तेज़ रखने और गार्ड पृष्ठों को चिह्नित करने के लिए करने के लिए बनाए जाते हैं ताकि बफर ओवरफ़्लो को पकड़ लिया जा सके।

बस ध्यान रखें कि ये मैपिंग केवल वर्चुअल एड्रेस स्पेस का हिस्सा उपयोग कर रहे हैं लेकिन वे वास्तव में सिस्टम मेमोरी का उपभोग नहीं कर रहे हैं।

http://www.greenend.org.uk/rjk/tech/dataseg.html

:

यहाँ आप एक पूर्ण विवरण प्राप्त कर सकते हैं