2013-05-05 10 views
9

मैं असेंबली के लिए नया हूं और इसलिए स्थानांतरण की अवधारणा के बारे में अधिक समझना चाहता हूं।स्थानांतरण की अवधारणा का क्या अर्थ है?

  1. हमें प्रोग्राम, डेटा को स्थानांतरित करने की ज़रूरत क्यों है?
  2. यह वास्तव में कैसे किया जाता है?

अगर कोई शुरुआती स्तर के उदाहरण के साथ समझा सकता है तो यह बहुत अच्छा होगा।

+0

http://stackoverflow.com/questions/6002359/so-most-of-the-binary-is-composed-of-reloc-table/6092773#6092773 – JosephH

+0

अपने व्यावहारिक प्रोग्रामिंग समस्या क्या है? क्या आपका प्रोग्राम स्थानांतरित होने के मुद्दे के कारण नहीं चल रहा है? –

+0

विस्तृत न्यूनतम उदाहरण: http://stackoverflow.com/a/30507725/895245 –

उत्तर

12

असेंबलर को देखने के लिए एक स्रोत फ़ाइल है। इसे उस स्रोत फ़ाइल के आधार पर एक मेमोरी छवि बनाना है। तो यह कोड के लिए 0 के साथ शुरू होता है, और डेटा के साथ 0 के लिए भी शुरू होता है। परिणाम ऑब्जेक्ट फ़ाइल में जाते हैं।

अब, लिंकर के साथ आता है और कई ऑब्जेक्ट फ़ाइलों को निष्पादन योग्य (या कर्नेल छवि, या जो कुछ भी) में जोड़ना होगा। यह सभी को 0 पर नहीं छोड़ सकता है, वे ओवरलैप करेंगे। इसलिए इसे प्रत्येक ऑब्जेक्ट फ़ाइल के डेटा को एक अद्वितीय सीमा में असाइन करने के लिए पते को स्थानांतरित करना होगा।

फिर, छवि वर्चुअल मेमोरी में लोड हो जाती है, ऑपरेटिंग सिस्टम के पास मूल वर्चुअल एड्रेस के रूप में '0' के अलावा किसी अन्य पते का उपयोग करने के अच्छे कारण हो सकते हैं। तो, रनटाइम पर, यह सब कुछ फिर से स्थानांतरित करना चाहता है।

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

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