ईएलएफ ने पुस्तकालयों को साझा किया - पीएलटी के लिए प्रेरणा


11

स्व-संशोधित कोड का उपयोग गतिशील रूप से जुड़े पुस्तकालयों में फ़ंक्शन कॉलिंग को तेज करने के लिए किया जा सकता है?

जहां तक ​​मैं इसे समझता हूं, पुस्तकालय कार्यों के आलसी बंधन को सक्षम करने के लिए ईएलएफ साझा पुस्तकालय एक तरह की अप्रत्यक्ष कूद तालिका (प्रक्रिया लिंकेज तालिका, या पीएलटी) का उपयोग करते हैं। उद्देश्य कोड खंड में तालिका को संशोधित करने से बचने के लिए लगता है जबकि अभी भी पहली कॉल पर फ़ंक्शन पदों के आलसी संकल्प को सक्षम करता है।

क्या यह लोड समय पर उस तालिका के लिए कोड को गतिशील रूप से बनाने के लिए तेज़ नहीं होगा, या संभवतः पहले फ़ंक्शन कॉल पर भी?

क्या यह संभव के रूप में प्रक्रियाओं के बीच कोड खंड को साझा करने में सक्षम है (एक गतिशील तालिका एक प्रक्रिया के लिए निजी होगी)? क्या यह सुरक्षा कारणों से है (लेखन कोड निष्पादन योग्य नहीं होना चाहिए - लेकिन जेआईटी हर समय ऐसा करते हैं, और लिखने की अनुमति लोडर द्वारा जोड़ा जा सकता है और हटाया जा सकता है, वास्तव में कार्यक्रम शुरू करने से पहले)।

या यह उन लोगों का एक संयोजन है, और प्रति फ़ंक्शन कॉल के प्रति छोटे प्रदर्शन का लाभ प्रयास के लायक नहीं होगा?

जवाबों:


8

मुझे लगता है कि हम x86 वास्तुकला के बारे में बात कर रहे हैं।

आपके पास संरक्षित मोड में सेल्फ-मॉडिफाइंग कोड नहीं हो सकता है , जो कि ज्यादातर UNIX- आधारित ऑपरेटिंग सिस्टम (और न केवल) द्वारा उपयोग किया जाता है, जिससे मैं परिचित हूं, क्योंकि कोड सेगमेंट हमेशा केवल पढ़ने के लिए होता है। लोडर नियंत्रित नहीं करता है कि यह कुछ ऐसा है जिसे कर्नेल की मेमोरी प्रबंधन सबसिस्टम द्वारा नियंत्रित किया जा रहा है।

लेकिन यहां तक ​​कि अगर आप "लोड समय पर उस तालिका के लिए कोड बना सकते हैं", जैसा कि आप कहते हैं, यह साझा पुस्तकालयों के पूरे उद्देश्य को धता बताएगा। इस तरह, प्रत्येक प्रक्रिया में अपने पते के स्थान में पुस्तकालय के कार्यों की एक "निजी" प्रतिलिपि होगी, जो प्रभावी रूप से अपनी स्मृति पदचिह्न बढ़ा रही है, जो साझा पुस्तकालय बनाए गए थे, इस मुद्दे को संबोधित करना था।

आपके द्वारा वर्णित पूरी प्रक्रिया काफी जटिल है, और यह आजकल उपयोग की जाने वाली PLT विधि की तुलना में अधिक प्रसंस्करण चक्र का खर्च करेगी, और संभवतः अधिक, नए और दिलचस्प सुरक्षा मुद्दों को पेश करेगी।


2
आप .text खंड पृष्ठों को लिखने योग्य और निष्पादन योग्य बनाने के लिए mprotect (2) सिस्टम कॉल का उपयोग कर सकते हैं।
ब्रूस एडिगर

1
यह सही है, सर। संभवत: यह औसत यूनिक्स-आधारित प्रणाली पर शालीनता से काम करेगा, लेकिन जैसे ही किसी ने पीएएक्स के साथ सिस्टम को सख्त करने की कोशिश की, पूरी लिंकिंग प्रक्रिया टूट जाएगी, जो कि असुरक्षित (2) प्रतिबंधों को लागू करती है।
डेकरगैसिडिस

(ऐसा लगता है कि मैं अपनी पिछली टिप्पणी में @BruceEdiger का उल्लेख करने से चूक गया)
dkaragasidis

1

ईएलएफ डीएसओ एक झंडे (DF_TEXREL) का उपयोग यह घोषणा करने के लिए कर सकते हैं कि उन्हें अपने पाठ खंड के संशोधन द्वारा (जो आमतौर पर केवल पढ़ने के लिए है) संशोधन की आवश्यकता होती है। पीआईई स्थिति स्वतंत्र कोड के साथ जंप टेबल दृष्टिकोण अधिक इष्टतम होना चाहिए, हालांकि।

(पाया गया कि http://www.akkadia.org/drepper/dsohowto.pdf में , लेकिन अन्य संसाधनों का भी उल्लेख है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.