2010-10-05 17 views
7

मैं rwxps बिट्स के अर्थ को समझता हूं। आर-एक्सपी .text के लिए है। rw-p .data/.bss/ढेर/ढेर के लिए है। ---p पृष्ठों का उपयोग क्या है?/proc/self/maps में "--- p" अनुमतियों का क्या अर्थ है?

उदाहरण के लिए man page के अनुसार cat /proc/self/maps

 
00400000-0040b000 r-xp 00000000 08:03 827490        /bin/cat 
0060b000-0060c000 rw-p 0000b000 08:03 827490        /bin/cat 
0060c000-0062d000 rw-p 00000000 00:00 0         [heap] 
3819a00000-3819a1e000 r-xp 00000000 08:03 532487       /lib64 ld-2.11.2.so 
3819c1d000-3819c1e000 r--p 0001d000 08:03 532487       /lib64/ld-2.11.2.so 
3819c1e000-3819c1f000 rw-p 0001e000 08:03 532487       /lib64/ld-2.11.2.so 
3819c1f000-3819c20000 rw-p 00000000 00:00 0 
3819e00000-3819f70000 r-xp 00000000 08:03 532490       /lib64/libc-2.11.2.so 
3819f70000-381a16f000 ---p 00170000 08:03 532490       /lib64/libc-2.11.2.so 
381a16f000-381a173000 r--p 0016f000 08:03 532490       /lib64/libc-2.11.2.so 
381a173000-381a174000 rw-p 00173000 08:03 532490       /lib64/libc-2.11.2.so 
381a174000-381a179000 rw-p 00000000 00:00 0 
7fb859c49000-7fb85fa7a000 r--p 00000000 08:03 192261      /usr/lib/locale/locale-archive 
7fb85fa7a000-7fb85fa7d000 rw-p 00000000 00:00 0 
7fb85fa95000-7fb85fa96000 rw-p 00000000 00:00 0 
7fff64894000-7fff648a9000 rw-p 00000000 00:00 0       [stack] 
7fff649ff000-7fff64a00000 r-xp 00000000 00:00 0       [vdso] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 
+1

यहां जवाब देखें: http://stackoverflow.com/questions/16524895/proc-pid-maps-shows-pages-with-no-rwx-permissions-on-x86-64-linux – Enyby

उत्तर

1

के इस उत्पादन को देखते हैं, यह निजी इसका मतलब (लिखने पर कॉपी)। इस बात का कोई अंदाजा नहीं है कि इस तरह के मानचित्रण की उपयोगिता क्या है, इसमें कुछ भी पढ़ने/लिखने/निष्पादित करने में सक्षम नहीं है।

संभवतः यह libc के लिए निजी है, जिससे उपयोगकर्ता प्रोग्राम के बिना इसे गलती से इसे एक्सेस करने के लिए अनुमतियों को संशोधित करने की अनुमति मिलती है।

+0

मुझे लगता है कि यह ऐसा है क्योंकि यदि एक प्रोग्राम जहां libc प्रति को संशोधित करना है, तो इसका उपयोग कर रहा था, तो संशोधित libc को उस प्रक्रिया की मेमोरी स्पेस में दोबारा मैप किया जाएगा, ताकि यह अन्य प्रक्रियाओं के लिए अनमोडिफाइड जारी रहे। – Dio

0

यह कुछ है जो मैंने भी विनिर्देशों के बारे में सोचा है। यह पिछले कुछ वर्षों में कभी-कभी प्रकट नहीं हुआ था, लेकिन मुझे यकीन नहीं है कि जीएनयू बिन्यूटिल्स या ग्लिबिक डायनामिक लिंकर (ld-linux.so.2) परिवर्तन के लिए ज़िम्मेदार है या नहीं।

पहले मैंने सोचा था कि यह गतिशील लिंकर द्वारा लाइब्रेरी के डेटा सेगमेंट तक सीमित सीमा से बचाने के लिए बनाए गए गार्ड क्षेत्र का एक प्रकार था, लेकिन इसका कोई मतलब नहीं है कि यह इतना बड़ा हो। यह संभव है कि यह लाइब्रेरी फ़ाइल का पूरा नक्शा है ताकि डायनामिक लिंकर भविष्य में कुछ समय में इसे फिर से पठनीय बना सके (शायद dlopen या dlsym कॉल के दौरान) ईएलएफ मेटाडेटा तक पहुंचने के लिए जो सामान्य रूप से मैप किए जाने की आवश्यकता नहीं होती है।

किसी भी मामले में, यह स्वादिष्ट ब्लोट है, खासकर 32-बिट मशीनों पर जहां वर्चुअल एड्रेस स्पेस एक बहुमूल्य संसाधन है। यह कर्नेल पेज टेबल को भी ब्लूट करता है, जो प्रक्रिया द्वारा उपयोग किए जाने वाले कर्नेलस्पेस संसाधनों को बढ़ाता है।

पीएस क्षमा करें यह वास्तव में एक जवाब नहीं है। मुझे पता है कि यह सिर्फ यादृच्छिक बिट्स और टुकड़े हैं जो उत्तर देने में मदद कर सकते हैं, लेकिन यह एक टिप्पणी के लिए बहुत लंबा रास्ता था।

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