2012-04-27 13 views
7

वर्तमान में मैं थोड़ा कार्यक्रम है कि योगिनी फ़ाइल शीर्षक पढ़ता है और कुछ जानकारीपढ़ना ELF हैडर

मैं एक अहस्ताक्षरित चार सूचक जो buf स्थान (मैं कहाँ योगिनी फ़ाइल स्मृति में स्थित है के लिए अंक कहा जाता है प्रिंट लिख रहा हूँ mmap इस्तेमाल किया स्मृति को यह मैप करने के लिए), तो मैं इसे एक उचित योगिनी हैडर सूचक

Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf; 

को टाइपकास्ट इस मैं इस कार्यक्रम हैडर तालिका के गैर-पता प्राप्त करना चाहते हैं के बाद, मैं इसे इस

Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff) 
पसंद करते हैं

मैं ptbl सूचक का मूल्य देखा परिवर्तन नहीं करता है और जब मैं इस

fprintf(stdout , "Offset of program headers : %d\n", ehdr->e_phoff); 

तरह e_phoff सदस्य का मान प्रिंट करने का प्रयास मैं शून्य एक ही सामान होता है जब मैं कार्यक्रम की संख्या मुद्रित करने के लिए कोशिश के रूप में हेडर और सेक्शन हेडर की संख्या - हमेशा शून्य प्राप्त करें यदि मैं लिनक्स को स्वयं का उपयोग करता हूं, तो यह उचित मान प्रिंट करता है क्या किसी को भी एक ही समस्या का अनुभव होता है?

+3

मुझे लगता है कि मुझे समस्या मिली है, मैं 64 बिट मशीन का उपयोग कर रहा हूं, इसलिए मैंने अभी Elf32_Phdr को Elf64_Phdr में बदल दिया है और यह –

+0

काम करता है अपने उत्तर का उत्तर दें। अगर आपको पहले जवाब मिल जाए तो यह करने के लिए एक वैध बात है। जाहिर है, आपने गलत स्ट्रक्चर पॉइंटर प्रकार का उपयोग किया है, इसलिए आप इच्छित इरादे की स्मृति अपस्ट्रीम का संदर्भ दे रहे थे। –

+0

मैं libelf का उपयोग करने का सुझाव देते हैं। –

उत्तर

5

जब एक ELF वस्तु को पार्स, आप को ध्यान में रखना है कि आवश्यकता होगी:

  1. आकार, फ़ाइल संरेखण और इन-फ़ाइल संरचनाओं (जैसे ELF निष्पादन हैडर के रूप में) के लिए आंतरिक लेआउट ELF पर निर्भर करता है वस्तु का शब्द आकार।
  2. ईएलएफ ऑब्जेक्ट की समाप्ति वस्तु को पढ़ने के कार्यक्रम की 'मूल' अंतहीनता से भिन्न हो सकती है।
  3. बड़ी संख्या में अनुभाग या प्रोग्राम सेगमेंट वाले ईएलएफ ऑब्जेक्ट्स वैकल्पिक "विस्तारित संख्या" योजना का उपयोग कर सकते हैं।

हाथ से इन मामलों को संभालने के बजाय, यह ELF वस्तु पार्स करने के लिए ELF (3) पहुँच एपीआई के एक कार्यान्वयन उपयोग करने के लिए आसान हो सकता है (देखें: BSD libelf, या GNU libelf)।

ट्यूटोरियल `` libelf by Example '' में ईएलएफ (3) एपीआई के लिए एक पठनीय परिचय शामिल है।

+0

धन्यवाद आदमी, ठीक है, मैं इस उदाहरण के साथ बस ईएलएफ क्या है, इसकी नज़दीकी भावना प्राप्त करने के लिए खेल रहा था, वैसे भी धन्यवाद उपयोगी लिंक –