2013-12-10 7 views
10

मुझे उत्सुकता है कि प्रक्रिया लिंकेज तालिका क्यों मौजूद है। इससे कौन सा उद्देश्य पूरा होगा? क्या असेंबली वैश्विक ऑफसेट टेबल को सीधे कॉल नहीं कर सका? पीएलटी को कॉल करने से क्या फायदा होता है ग्लोबल ऑफसेट टेबल पर कॉलिंग?प्रक्रिया लिंकेज तालिका का उद्देश्य क्या है?

पूरी प्रक्रिया अभी भी मुझे भ्रमित करने वाली है और मैं इन और बाहर गतिशील लिंकिंग को समझने की कोशिश कर रहा हूं ताकि किसी भी मदद की सराहना की जा सके।

+0

[प्रक्रिया लिंकेज तालिका और वैश्विक ऑफ़सेट तालिका] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/9688076/process-linkage-table-and-global-offset-table) –

+1

वह प्रश्न मेरे प्रश्न का उत्तर नहीं देता है सभी – Rell3oT

उत्तर

9

पीआईसी कोड से किए गए कॉल के लिए, आप सही हैं कि पीएलटी की वास्तव में आवश्यकता नहीं है। संकलक बस जीओटी से प्राप्त पते पर एक गॉट लुकअप और अप्रत्यक्ष कॉल उत्पन्न कर सकता था। पीएलटी का उपयोग करना कोड को थोड़ा अधिक कुशल बनाने के लिए होता है (कम से कम, कम कॉल ब्लोट प्रति कॉल) ताकि इसे आम तौर पर इस्तेमाल किया जा सके।

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

+0

ग्रेट पर! एक अंतिम सवाल। यदि कोई पीएलटी नहीं था तो पीआईसी कोड में जीओटी को अलग-अलग क्या करना होगा? अधिक विशेष रूप से ... यह और अधिक फूला क्यों होगा? – Rell3oT

+0

जब तक यह पीएलटी के माध्यम से जाता है, पीआईसी कोड से एक कॉल आमतौर पर गैर-पीआईसी कोड से कॉल के समान दिखता है, यानी एक पीसी-रिश्तेदार कॉल निर्देश। (इसमें अतिरिक्त आवश्यकताएं हो सकती हैं कि जीओटी रजिस्टर पहले ही लोड हो चुका है, हालांकि; यह आर्क-विशिष्ट है।) पीएलटी का उपयोग किए बिना जीओटी के माध्यम से एक कॉल सामान्य रूप से पीएलटी प्रविष्टि में कोड को रेखांकित करने जैसा ही होगा, जो आमतौर पर होता है वास्तविक फ़ंक्शन पता लोड करने के लिए 2-3 निर्देश और उस पर कूदें। –

+0

ठीक है, मैंने यही पाया। मुझे लगता है कि इस मामले में थोक काफी महत्वपूर्ण होगा कि कई अलग-अलग कार्यों को बुलाया जाता है, इसलिए बेहतर समझने के लिए दो अलग-अलग 'परतों' कॉल करना अच्छा होता है। धन्यवाद – Rell3oT

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