2010-03-11 10 views
71

शिकायतों द्वारा उत्पादित अंतिम छवियों में बिन फ़ाइल और विस्तारित लोडर प्रारूप ईएलएफ फ़ाइल दोनों शामिल हैं, दोनों के बीच अंतर क्या है, खासकर ईएलएफ फ़ाइल की उपयोगिता।ईएलएफ फाइलों और बिन फाइलों के बीच क्या अंतर है?

+0

[यही वह है जिसे NASM कहना है] (http://www.nasm.us/doc/nasmdoc7.html#section-7.1)। एआरएम विशिष्ट नहीं है, लेकिन एक ही अवधारणा होने की संभावना है। उदाहरण के लिए, यदि आप '-f' (या' -fbin') के बिना केवल 'एनओपी' वाली फ़ाइल संकलित करते हैं, तो यह 400 बाइट ईएलएफ कंटेनर के बजाय '-felf32' के बजाय एक बाइट' 0x90' तक संकलित करता है। तो सिर्फ कच्चा कोड, कोई कंटेनर मेटाडेटा नहीं। NASM का कहना है कि इसका ज्यादातर एमएस-डॉस .COM और [.SYS] (https://en.wikipedia.org/wiki/.sys) फ़ाइलों के लिए उपयोग किया जाता है। 'सेक्शन' निर्देशों को ज्यादातर अनदेखा किया जाता है और केवल संरेखण उत्पन्न होता है। –

+0

यह एक तरीका है जिसमें बिन फ़ाइलें उपयोगी हो सकती हैं: बूट सिस्टम को ऑपरेटिंग सिस्टम को तैनात करने के लिए: http: // stackoverflow।कॉम/ए/32483545/895245 –

उत्तर

71

एक बिन फ़ाइल एक शुद्ध बाइनरी फ़ाइल है जिसमें कोई मेमोरी फ़िक्स-अप या स्थान नहीं है, संभावना है कि उसके पास एक विशिष्ट स्मृति पते पर लोड होने के लिए स्पष्ट निर्देश हैं। जबकि ....

ELF फ़ाइलों निष्पादन योग्य स्वरूप प्रतीक लुक-अप और पुनर्निधारणीय तालिका के होते हैं जो, वह यह है कि यह किसी भी स्मृति पते पर गिरी द्वारा लोड किया जा सकता है और स्वचालित रूप से उपयोग किए गए सभी प्रतीकों, समायोजित कर रहे हैं कर रहे हैं उस मेमोरी पते से ऑफ़सेट करने के लिए जहां इसे लोड किया गया था। आम तौर पर ईएलएफ फाइलों में कई डेटा होते हैं, जैसे 'डेटा', 'टेक्स्ट', 'बीएसएस', नाम के लिए लेकिन कुछ ... यह उन वर्गों के भीतर है जहां रन-टाइम गणना कर सकता है कि प्रतीक के स्मृति संदर्भों को समायोजित करना है गतिशील रूप से रन-टाइम पर।

+0

"संभावना से अधिक स्पष्ट निर्देशों पर एक विशिष्ट स्मृति पते पर लोड होने के लिए स्पष्ट निर्देश हैं": क्या इसका मतलब है कि बिन फ़ाइल जनरेशन प्रक्रिया डेटा को विशिष्ट पते पर लोड करने के लिए अतिरिक्त कोड जोड़ती है? – xiaobai

+1

जहां तक ​​मैंने सीखा है कि बिन फ़ाइल ऑफ़सेट 0 से प्रोग्राम चलाने की तरह है और डेटा सेगमेंट को एम्बेड किया गया है। यदि यह गलत है तो कृपया मुझे सही करें। –

+0

@MartinKersten सही, बिन फाइल ऑफसेट से शुरू होती है 0. – t0mm13b

21

कुछ संसाधनों:

  1. विकी
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

ELF प्रारूप से एआरएम वास्तुकला
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf

  • ELF के लिए ELF आम तौर पर संकलन के डिफ़ॉल्ट उत्पादन होता है।

    arm-elf-objcopy -O binary [elf-input-file] [binary-output-file] 
    

    या fromELF सुविधा का उपयोग (सबसे IDEs में बनाया इस तरह के विज्ञापनों के रूप में यद्यपि): अगर आप जीएनयू उपकरण जंजीरों का उपयोग करें, आप इसे बाइनरी फ़ॉर्मेट में जैसे, objcopy का उपयोग करके अनुवाद कर सकते हैं

    fromelf -bin -o [binary-output-file] [elf-input-file] 
    
  • +1

    -1। यह बिन फ़ाइल क्या है इसके बारे में सवाल का जवाब नहीं देता है। – xiaobai

    +6

    यह बिन फ़ाइल विवरण का उत्तर देने के बाद जोड़ा गया था, और * व्यावहारिक रूप से उपयोगी तकनीक को जोड़ता है। इसके लिए +1। – erbdex

    26

    एक बिन फ़ाइल केवल बिट्स और बाइट्स है जो रोम में जाते हैं या एक विशेष पता जिससे आप प्रोग्राम चलाएंगे। आप यह डेटा ले सकते हैं और इसे सीधे लोड कर सकते हैं, आपको पता होना चाहिए कि मूल पता क्या है, हालांकि सामान्य रूप से वहां नहीं है।

    एक एल्फ फ़ाइल में बिन जानकारी होती है लेकिन यह कई अन्य जानकारी, संभावित डीबग जानकारी, प्रतीकों से घिरा हुआ है, बाइनरी के भीतर डेटा से कोड को अलग कर सकती है। द्विआधारी डेटा के एक से अधिक हिस्सों की अनुमति देता है (जब आप इनमें से किसी एक को बिन में डंप करते हैं तो आपको डेटा को भरने के लिए एक बड़ी बिन फ़ाइल मिलती है ताकि इसे अगले ब्लॉक में पैड किया जा सके)। आपको बताता है कि आपके पास कितनी बाइनरी है और कितना बीएसएस डेटा है जो ज़ीरोस में प्रारंभ करना चाहता है (gnu टूल्स में बिन फाइलें सही तरीके से बनाने में समस्याएं हैं)।

    एल्फ फ़ाइल प्रारूप मानक है, हाथ मानक में इसके एन्हांसमेंट/विविधता प्रकाशित करता है। मैं सलाह देता हूं कि हर कोई एक एल्फ पार्सिंग प्रोग्राम लिखता है कि वहां क्या है, पुस्तकालय से परेशान न हों, कल्पना में सूचना और संरचनाओं का उपयोग करना बहुत आसान है। सामान्य रूप से .bin फाइलों के साथ-साथ डिबगिंग लिंकर स्क्रिप्ट और अन्य चीजों को बनाने में gnu समस्याओं को दूर करने में मदद करता है जो आपके बिन या एल्फ़ आउटपुट को गड़बड़ करने में मदद कर सकते हैं।

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

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