के साथ स्टैक पॉइंटर शुरू करना सेट करें, मैं वर्चुअल मेमोरी के अंत में एक विशेष अनुभाग के साथ एक प्रोग्राम बनाना चाहता हूं। तो मैं इस तरह एक लिंकर स्क्रिप्ट कुछ करना चाहता था:स्पष्ट रूप से लिंकर स्क्रिप्ट
/* ... */
.section_x 0xffff0000 : {
_start_section_x = .;
. = . + 0xffff;
_end_section_x = .;
}
समस्या यह है कि जीसीसी/ld/glibc एक 32 बिट अनुप्रयोग के लिए डिफ़ॉल्ट रूप से इस स्थान पर ढेर लोड करने के लिए, भले ही यह एक ज्ञात overlaps लगते हैं अनुभाग। उपर्युक्त कोड शून्य एक अपवाद के कारण ढेर से बाहर है। स्टैक के लिए एक और वीएम मेमोरी लोकेशन का उपयोग करने के लिए लिंकर को बताने का कोई तरीका है? (साथ ही, मैं यह सुनिश्चित करना चाहता हूं कि ढेर वर्चुअल मेमोरी के इस खंड को नहीं बढ़ाएगा ...)।
आपको अपने लक्ष्य के बारे में अधिक जानकारी प्रदान करने की आवश्यकता है। आरंभिक रजिस्टर सामग्री (जो स्टैक स्थान निर्धारित करती है) लक्ष्य-निर्भर है। –
यह एक आर्म -8 सिस्टम है (32 बिट मोड में संकलित)। मैं एक gcc 4.7.0 टूलचेन के साथ एक लिनक्स 3.10 कर्नेल का उपयोग कर रहा हूँ। – HardcoreHenry