2012-11-16 12 views
11

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

+1

मुझे करना है कहें, जबकि मुझे लगता है कि यह एक बहुत ही स्थानीय प्रश्न के बहुत गहरे छोर में तैराकी कर रहा है, मैं बस इसे नीचे वोट करने के लिए नहीं ला सकता हूं (और वास्तव में इसके बजाय वोट-वोट), क्योंकि यह एक बहुत ही दिलचस्प है विचार और जिज्ञासा ने मुझे जीत लिया है (और स्पष्ट रूप से अन्य भी)। सौभाग्य! – WhozCraig

+0

@vamsi प्रश्न मेरे लिए थोड़ा अस्पष्ट है। क्या आप तीसरे पक्ष (अपग्रेड) का नया संस्करण लोड करते समय हर बार GOT को बदलते हैं? क्या आप खुद लोडर लिखना चाहते हैं? – selalerer

+0

@selalerer हां, मेरा मतलब है कि हर बार जब मैं एक नया तृतीय पक्ष संस्करण लोड करता हूं तो गॉट बदल जाता है। हां, संक्षेप में मैं क्या करूँगा एक हल्के लोडर है। मैं एक पूर्ण नेतृत्व वाले लोडर को लागू नहीं करना चाहता हूं। मैं बस इतना करना चाहता हूं कि जीओटी/पीएलटी टेबल फिक्सअप करें और नया कोड सक्रिय करें। – vamsi

उत्तर

1

क्या सही उत्तर "गतिशील लिंकर/लोडर एम्बेड करें" से लंबा है? आपकी समस्या वही दिखाई देती है जो ld.so और पसंद से हल होती है। एक गतिशील लिंकर/लोडर को उन सभी चीजों का वर्णन करना चाहिए जो जॉन लेविन द्वारा Linkers and Loaders जैसी पुस्तकों का विषय है।

+1

मैं अपने स्वयं के एम्बेडेड लोडर लिखने से कुछ आसान ढूंढ रहा हूं। मैंने ऊपर दी गई पुस्तक को पढ़ा है। जब मैं अपनी समस्या के माध्यम से काम कर रहा हूं तो मैं जो कर रहा हूं उसे पोस्ट करूंगा। धन्यवाद!। – vamsi

0

क्या लिनक्स/यूनिक्स binutils objcopy आप जो खोज रहे हैं वह बनें। यह मानते हुए कि आप यादृच्छिक क्रम में रनटाइम पर गतिशील रूप से उन्हें लोड करने के बजाय वास्तव में अपनी सभी बाइनरी बना रहे हैं [और आपके पास उस स्मृति में उन्हें फैलाने के लिए पर्याप्त स्मृति नहीं है], तो मुझे लगता है कि यह काम करेगा।

बेशक, अगर आपको केवल गॉट को ठीक करने की आवश्यकता है, तो मुझे नहीं लगता कि आप ऐसा क्यों नहीं कर सकते हैं - यह मुश्किल है कि कुछ टोपी लिखना मुश्किल नहीं है। लेकिन objcopy पहले से ही लिखा गया है, और बाइनरी/निष्पादन योग्य "मैसिंग के बारे में काफी कुछ कर सकता है" (मैंने इसे विभिन्न प्रणालियों के लिए बूट-रोम बनाने के लिए उपयोग किया है, जिसमें पीसी के लिए BIOS रोम और इसी तरह के) शामिल हैं [नहीं कि मैं आया इस विचार के साथ, जैसे मैंने किसी के मेकफ़ाइल को लिया, जिसमें इसके अंदर ओब्जाकॉपी हुई - मैंने देखा कि यह समझने के लिए क्या हुआ कि यह कैसे किया गया जब यह एक बिंदु या किसी अन्य पर गलत हो रहा था]