2009-04-27 4 views
6

संशोधित करना मैं एक एल्फ फ़ाइल में एक नया झंडा जोड़ना चाहता हूं। यह ध्वज प्रक्रिया वर्णनकर्ता में कर्नेल में उपलब्ध होना चाहिए। मेरा पहला विचार libelf का उपयोग करना था, लेकिन दुर्भाग्य से उबंटू पर इसके साथ एक बग प्रतीत होता है। Elfedit शायद एक अच्छा उपकरण रहा होगा, लेकिन मुझे विशेष रूप से उबंटू में लिनक्स के लिए एक संस्करण नहीं मिला है।एएलएफ फ़ाइल

तो, मुझे आश्चर्य है कि अगर कोई अन्य सुझाव दे सकता है कि कोई अन्य उपयोगी टूल है तो एक एल्फ फ़ाइल में कस्टम ध्वज जोड़ने के लिए?

आपकी मदद के लिए बहुत धन्यवाद!

+0

आप खुद को क्या गड़बड़ में मिला? –

+0

फ़ाइल में टाइप.c: 3: /usr/include/libelf.h:98: त्रुटि: 'off64_t' से पहले अपेक्षित विनिर्देशक-क्वालीफायर-सूची ... अधिक यहां पाया जा सकता है: https://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

उत्तर

2

लोग जो नए ध्वज का लाभ उठाने के लिए कर्नेल को संशोधित करने में सक्षम हैं, शायद यह नहीं पूछेंगे कि ईएलएफ पुस्तकालयों में ध्वज कैसे जोड़ना है।

तो, आप कर्नेल को इस नए ध्वज का उपयोग करने की योजना कैसे बनाते हैं? ध्वज का उद्देश्य क्या है?

चूंकि आप मानक libelf में जोड़ रहे हैं, तो आप उबंटू के लिए बग ठीक नहीं कर सकते हैं और उन्हें बताएं कि आपने ऐसा किया है (उन्हें ठीक करने के लिए ठीक करें - हालांकि उन्हें शायद इसे वापस रिले करना होगा श्रृंखला ऊपर)।

+0

हां, आप बिल्कुल सही हैं। अगर मैं एक उचित कर्नेल हैकर होगा तो यह शायद एक साधारण काम होगा। दुर्भाग्यवश, मैं बस कर्नेल पर कुछ व्यावहारिक काम शुरू कर रहा हूं। असल में, मैं ईएलएफ फ़ाइल में एक ध्वज निर्दिष्ट करना चाहता हूं जो कर्नेल को बताता है कि किसी एप्लिकेशन को कुछ "विशेष उपचार" की आवश्यकता है। यह विशेष उपचार संदर्भ स्विच के दौरान होना चाहिए, और वहां मैं जानना चाहूंगा कि जिस कार्य को स्विच किया गया है, वह ईएलएफ फ़ाइल में यह कस्टम ध्वज था। दूसरे शब्दों में, मेरे पास 2 कार्य (1) संबंधित निष्पादन योग्य (2) के लिए कस्टम ध्वज जोड़ें कर्नेल –

1

कृपया ELFIO library पर देखें। इसमें WriteObj और लेखक उदाहरण शामिल हैं। लाइब्रेरी का उपयोग करके, आप ईएलएफ बाइनरी फाइलें बनाने और/या संशोधित करने में सक्षम होंगे।

+0

पर यह कस्टम ध्वज उपलब्ध कराएं मुझे वास्तव में लाइब्रेरी पसंद है और मैंने इसके साथ अंतिम दिन काम किया है (इसे एक रूप में परिवर्तित करने की कोशिश कर रहा है पुस्तकालय)। मुझे टेम्पलेट्स और मैक्रोज़ के साथ सभी स्रोत मिल गए (उर्फ घोषणाओं और परिभाषाओं में विभाजित), हालांकि अब lib क्रैश हो रहा है (एलओएल)। खैर, क्या आप खुद को "असली" लाइब्रेरी बनाने के बारे में सोच सकते हैं? – lama12345

0

(हालांकि पुराने सवाल लेकिन संदर्भ के लिए मैं अपने खुद के अनुभव के आधार पर इस सवाल का जवाब लिख रहा हूँ)

मैं, स्मृति struct में योगिनी फ़ाइल को पढ़ने अपने इन-स्मृति struct के साथ झंडे और लोड प्रक्रिया स्मृति में परिवर्तन करने का सुझाव देते हैं। बग सुधार की तुलना में इस विधि को कम प्रभाव की आवश्यकता होगी। शुरू करने के लिए, elf, प्रोग्राम हेडर, सेक्शन हेडर स्ट्रक्चर के लिए फ़ाइल elf.c जांचें। आप अपनी संरचना में फ़ाइल हेडर पढ़ सकते हैं जिसमें एल्फ, प्रोग्राम, सेक्शन के लिए तीन स्ट्रक्चर सदस्य होना चाहिए। एल्फ हेडर से अपनी संरचना में पढ़ना शुरू करें। फिर एल्फ़ हेडर में दिए गए ऑफ़सेट पर प्रोग्राम हेडर पढ़ें (सभी प्रोग्राम शीर्षकों के लिए यह क्रमशः)। उसी तरह आप सेक्शन हेडर के माध्यम से सभी वर्गों को पढ़ सकते हैं। आपकी खुद की संरचना में 3 शीर्षलेख संरचना encapsulating भी आपको अपने अन्य संरचना सदस्य में अतिरिक्त आवश्यक डेटा रखने के लिए अवसर प्रदान करते हैं।