2010-06-03 6 views
28

उबंटू x86 सिस्टम पर एक ईएलएफ बाइनरी को अलग करना मैं मदद नहीं कर सका लेकिन ध्यान दिया कि कोड (.text) सेक्शन वर्चुअल एड्रेस 0x8048000 से शुरू होता है और सभी कम मेमोरी पतों का उपयोग अप्रयुक्त होता है।लिनक्स बाइनरी के लिए वर्चुअल मेमोरी पते 0x8048000 पर क्यों शुरू होते हैं?

ऐसा लगता है कि यह अपर्याप्त लगता है और सभी Google चालू हो जाते हैं या तो folklore involving STACK_TOP या नल-पॉइंटर डेरफ़्रेंस के विरुद्ध सुरक्षा है। बाद वाला मामला ऐसा लगता है कि 128 एमबी अंतर को छोड़ने के बजाय इसे एक पेज का उपयोग करके तय किया जा सकता है।

तो मेरा सवाल यह है - क्या यह एक निश्चित उत्तर है कि लेआउट को इन मानों के लिए क्यों तय किया गया है या यह सिर्फ मनमानी विकल्प है?

+0

मुझे वास्तविक उत्तर नहीं पता है; लेकिन शायद यह लेख या तो मदद कर सकता है या कम से कम एक दिलचस्प पढ़ा सकता है! http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

संभावित डुप्लिकेट [ईएलएफ निष्पादन प्रविष्टि बिंदु 0x80xxxxx के आभासी पते को क्यों इंगित करता है और शून्य 0x0 नहीं है?] (http: // stackoverflow .com/प्रश्न/2187484/क्यों-है-योगिनी-निष्पादन-प्रवेश बिंदु आभासी-पते के-रूप-0x80xxxxx और एन) –

उत्तर

24

Linkers and loaders पुस्तक से:

386 सिस्टम पर, पाठ आधार पते 0x08048000, जो टेक्स्ट के नीचे एक यथोचित बड़े ढेर परमिट जबकि अभी भी पता 0x08000000 ऊपर रहने, एक भी दूसरा उपयोग करने के लिए ज्यादातर कार्यक्रमों की अनुमति है -वेल पेज टेबल। (याद रखें कि 386 पर, प्रत्येक दूसरे-स्तरीय तालिका के नक्शे 0x00400000 पते।)

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