सामान्य अर्थ में, mprotect
sys/mman.h
के तहत पसंदीदा विकल्प (POSIX अनुरूप प्रणाली पर) है (http://linux.die.net/man/2/mprotect देखें)। बस अनुमति प्रक्रिया का अनुरोध करने के लिए अपनी प्रक्रिया के निष्पादन योग्य अनुभाग का पता और सिस्टम पेज गिनती प्राप्त करें और mprotect
पर कॉल करें; इसे लिखो; फिर, लिखने की अनुमति जारी करने के लिए फिर से mprotect
पर कॉल करें।
हालांकि, अगर यह जहां गति पूर्ण महत्व का है निम्न स्तर के दिनचर्या पर करने के लिए है (या mprotect
नहीं उपलब्ध है) तो आप mprotect
सबसे अधिक संभावना मुद्दों बुला के रूप में अपनी .text
खंड लिखने योग्य के साथ पुस्तकालय संकलित करने के लिए चाहता हूँ एक अनुवाद लुकसाइड बफर (टीएलबी) फ्लश है कि (विशेष रूप से एक बहु-प्रोसेसर पर्यावरण में) एक बाधा उत्पन्न कर सकता है। यदि विशिष्ट प्रणाली पेजिंग के माध्यम से हार्डवेयर सुरक्षा का उपयोग कर रही है (जो लगभग सभी अब हैं) तो सुरक्षा को बदलने का एकमात्र तरीका एक टीएलबी फ्लश कर रहा है जिसे प्रत्येक संदर्भित पृष्ठ पर निष्पादित किया जाना चाहिए, संदर्भित पृष्ठ तालिका (पृष्ठों का समूह), संदर्भित पृष्ठ निर्देशिका (पृष्ठ सारणी का समूह) और प्रत्येक प्रोसेसर। इसे ऊपर करने के लिए, इसे रिंग 0 में निष्पादित किया जाना चाहिए जिसके लिए एक सिस्कल की आवश्यकता होती है जो चेरी को ऊपरी हिस्से में ऊपर रखती है।
बाद के मामले में, सबसे आसान समाधान लाइब्रेरी को सामान्य रूप से संकलित करना होगा और फिर objcopy
इसे --writable-text
(जैसा कि ggiroux द्वारा उल्लिखित) के साथ होगा।
एक और समाधान लिंकर मानचित्र फ़ाइल linker.ld
स्वयं को परिभाषित करना होगा। फिर आप स्पष्ट रूप से किसी भी खंड की अनुमतियां निर्दिष्ट कर सकते हैं। यह बहुत जटिल नहीं है; अगर सिस्टम-निर्भर है। http://www.math.utah.edu/docs/info/ld_3.html पर प्रलेखन का संदर्भ लें। आप अपने सिस्टम को linker.ld
फ़ाइल प्रदान कर सकते हैं और इसे वहां से संशोधित कर सकते हैं। जीसीसी में -Wl,--verbose
पास करने से लिंकर को सभी प्रासंगिक फाइलों (इसके डिफ़ॉल्ट लिंकर.एलडी सहित) को थूकने का निर्देश दिया जाएगा जिसमें आप .text अनुभाग की अनुमतियों को संशोधित कर सकते हैं और नई linker.ld
फ़ाइल का उपयोग करके लाइब्रेरी (हमेशा के लिए) को पुन: संकलित कर सकते हैं।
संक्षेप में, मेरी सिफारिश अंतिम पैराग्राफ राज्यों के रूप में करना होगा और अपनी लाइब्रेरी को थोड़ा संशोधित लिंकर स्क्रिप्ट के साथ संकलित करना होगा।
स्रोत
2012-01-10 08:58:13
ऐसा करने के लिए व्यावहारिक कारण क्या है के साथ जीसीसी के पास हो सकता है के साथ लिंक करने के लिए है? – cateof