2010-01-12 12 views
5

मैं एक प्रक्रिया के लिनक्स आईए -32 मेमोरी मॉडल को देख रहा हूं और मेरे पास इसका एक सरल सवाल है। तस्वीर में भूरे रंग के क्षेत्रों में क्या होता है? क्या वे केवल स्मृति की शुरुआत और अंत दिखाने के लिए शामिल हैं? तो, पाठ 0x0 पर शुरू करें और 0xFFFFFFFF पर स्टैक शुरू करें?लिनक्स आईए -32 मेमोरी मॉडल

फिर से खोला गया: हाय, एक ओएस कोर्स में मैं इस प्रश्न में भाग ले रहा हूं फिर से प्रासंगिक हो जाता है। विशेष रूप से, मुझे यह जानने की जरूरत है कि भूरे रंग के क्षेत्रों में क्या है। अब तक उत्तरों के आधार पर, मैं देख सकता हूं कि इसमें शीर्ष पर कर्नेल कोड और नीचे एक शून्य-सूचक ड्रेफरेंस पृष्ठ शामिल है। लेकिन कर्नेल कोड क्या है? मुझे नहीं लगता कि यह पूरी ऑपरेटिंग सिस्टम है, लेकिन क्या यह एम्बेडेड शेड्यूलर, कर्नेल लाइब्रेरी कॉल या हो सकता है?

सादर, लासे Espeholt

alt text http://img403.imageshack.us/img403/3156/capturecj.png

उत्तर

9

मुझे लगता है कि यह अधिक सटीक है: alt text

+0

अहह समझ में आता है;) लेकिन उस ग्राफ प्रक्रियाओं के अनुसार केवल ~ 1 जीबी रैम के साथ काम करने के लिए है। (0xC0000000 - 0x80480000) लेकिन यह कर्नेल वर्चुअल मेमोरी में बढ़ सकता है? –

+1

यह 0x08048000 है, 0x80480000 नहीं। तो यह 3 जीबी से थोड़ा कम है। – wj32

+0

आह मेरा बुरा, धन्यवाद :) –

5

मुझे लगता है कि ग्रे क्षेत्रों बस अपरिभाषित आकार के क्षेत्रों का प्रतिनिधित्व करते हैं। प्रोग्राम टेक्स्ट निश्चित रूप से 0x0 पर शुरू नहीं होगा, क्योंकि अधिकांश ओएस उन्हें अमान्य पृष्ठों के रूप में उपयोग करते हैं, इसलिए शून्य ड्रेरेंस आसानी से पकड़े जा सकते हैं। थ्रेड स्टैक्स भी 0xffffffff तक नहीं जाएंगे क्योंकि आमतौर पर शीर्ष तिमाही (या आधा) में कर्नेल मेमोरी मैप की जाती है।

+0

शून्य संदर्भ बहुत समझ में आता है;) धन्यवाद। –

2

ध्यान दें कि पता स्थान के निचले भाग में शून्य पेज क्षेत्र नहीं वास्तव में आम लिनक्स वितरण के तहत आवेदन उपयोग करने के लिए मना है। कर्नेल ऐसा करने के लिए प्रयोग करता था, फिर एलएसएम मॉड्यूल (उदाहरण के लिए SELinux, AppArmor) के लिए निर्णय लेने वाले खेती को समाप्त कर दिया। और उन्होंने एक ही नियम को लागू नहीं किया, इसलिए 0x0 पर स्मृति को मैप करने के लिए प्रक्रियाओं के लिए यह संभव हो गया। यह हाल ही में "कर्नेल नल पॉइंटर डेरफेरेंस" शोषण के पीछे भेद्यता का हिस्सा था।

+0

'/ proc/sys/vm/mmap_min_addr' को वेनिला कर्नेल द्वारा गैर-शून्य पर डिफॉल्ट किया गया है, इसलिए यह केवल तभी महत्वपूर्ण है जब आपके पास कोई वितरण हो जो इसे बदलता है या एलएसएम का उपयोग करता है। मुझे नहीं पता कि यह कितना आम है; डेबियन नहीं करता है, उबंटू नहीं करता है (जब तक शराब स्थापित नहीं होता है), Gentoo नहीं करता है ... और यह वह सभी वितरण है जिसका मैं उपयोग करता हूं। – ephemient

+0

फेडोरा और रेड हैट जहाज SELinux डिफ़ॉल्ट रूप से सक्षम है। Novell/SuSE जहाजों AppArmor, जैसा कि हाल के संस्करणों में उबंटू करता है। एलएसएम आधुनिक दुनिया में अपवाद की तुलना में अधिक नियम है, और ऐसा होता है क्योंकि इसके परिणामस्वरूप शून्य पृष्ठ सुरक्षा में एक प्रतिगमन होता है। –

5

यह भी ध्यान दें कि address space layout randomization के कारण, कुछ अनुभागों के शुरुआती पते आरेखों के मानों से यादृच्छिक रूप से ऑफ़सेट होते हैं।

3

कोई भी ऐसा नहीं लगता है कि उपलब्ध स्थान में सभी स्मृति आवश्यक रूप से मैप नहीं की गई है (और यह लगभग कभी नहीं है)।

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