2017-11-16 28 views
6

के साथ स्टैक पॉइंटर शुरू करना सेट करें, मैं वर्चुअल मेमोरी के अंत में एक विशेष अनुभाग के साथ एक प्रोग्राम बनाना चाहता हूं। तो मैं इस तरह एक लिंकर स्क्रिप्ट कुछ करना चाहता था:स्पष्ट रूप से लिंकर स्क्रिप्ट

/* ... */ 
.section_x 0xffff0000 : { 
    _start_section_x = .; 
    . = . + 0xffff; 
    _end_section_x = .; 
} 

समस्या यह है कि जीसीसी/ld/glibc एक 32 बिट अनुप्रयोग के लिए डिफ़ॉल्ट रूप से इस स्थान पर ढेर लोड करने के लिए, भले ही यह एक ज्ञात overlaps लगते हैं अनुभाग। उपर्युक्त कोड शून्य एक अपवाद के कारण ढेर से बाहर है। स्टैक के लिए एक और वीएम मेमोरी लोकेशन का उपयोग करने के लिए लिंकर को बताने का कोई तरीका है? (साथ ही, मैं यह सुनिश्चित करना चाहता हूं कि ढेर वर्चुअल मेमोरी के इस खंड को नहीं बढ़ाएगा ...)।

+0

आपको अपने लक्ष्य के बारे में अधिक जानकारी प्रदान करने की आवश्यकता है। आरंभिक रजिस्टर सामग्री (जो स्टैक स्थान निर्धारित करती है) लक्ष्य-निर्भर है। –

+0

यह एक आर्म -8 सिस्टम है (32 बिट मोड में संकलित)। मैं एक gcc 4.7.0 टूलचेन के साथ एक लिनक्स 3.10 कर्नेल का उपयोग कर रहा हूँ। – HardcoreHenry

उत्तर

1

मुझे लगता है कि प्रश्न गलत है या नहीं, लेकिन अगर आपको 64k सेगमेंट की आवश्यकता है, तो मुझे स्टार्टअप पर एक आवंटित क्यों नहीं किया जा सकता है?

आपको अपनी प्रक्रिया पता स्थान के भीतर संभवतः एक निश्चित पता क्यों चाहिए? मैं लगभग 30 वर्षों के लिए कई प्रकार के कोडिंग कर रहा हूं, और मैंने संरक्षित स्मृति के आगमन के बाद से एक निश्चित पते की आवश्यकता नहीं देखी है।

+0

दुर्भाग्य से सवाल गलत नहीं है। मैं एक मौजूदा सिस्टम को संशोधित कर रहा हूं जिसमें पॉइंटर में विभिन्न बिट्स को विशेष अर्थ निर्दिष्ट करने की क्षमता है। इस प्रकार, मुझे एक विशेष उद्देश्य के लिए 0xffff0000 पता श्रेणी आरक्षित करने की आवश्यकता है। – HardcoreHenry

+0

@ हार्दकोर हेनरी मुझे यकीन है कि इस प्रणाली को बनाने वाले किसी भी व्यक्ति ने इसे "सुरुचिपूर्ण" बताया है, हालांकि मुझे लगता है कि 99% दुनिया, उम्मीद है कि आप सहित, इसे बुराई के रूप में देखती है। उस ने कहा, इन मूर्ख मुद्दों को वैध पते के लिए क्यों हल करना है? अस्थिरता की कुछ परत अतिरिक्त कार्यक्षमता प्रदान नहीं कर सकती है जबकि निश्चित मेमोरी पतों की आवश्यकता नहीं है? वे उन बिट्स सेट के साथ एक स्ट्रक्चर को इंगित कर सकते हैं, या पॉइंटर को डिफ्रेंस करना एक दिनचर्या द्वारा किया जा सकता है जो जानता है कि एक लुकसाइड कैसे करें? –

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