कंप्लाइज़र्स द्वारा निर्मित अंतिम छवियों में बिन फ़ाइल और विस्तारित लोडर प्रारूप एल्फ फ़ाइल दोनों शामिल हैं, दोनों के बीच अंतर क्या है, विशेष रूप से ईएलएफ फ़ाइल की उपयोगिता।
कंप्लाइज़र्स द्वारा निर्मित अंतिम छवियों में बिन फ़ाइल और विस्तारित लोडर प्रारूप एल्फ फ़ाइल दोनों शामिल हैं, दोनों के बीच अंतर क्या है, विशेष रूप से ईएलएफ फ़ाइल की उपयोगिता।
जवाबों:
बिन फ़ाइल एक शुद्ध बाइनरी फ़ाइल है जिसमें कोई मेमोरी फिक्स-अप या रिलोकेशन नहीं होता है, अधिक से अधिक यह विशिष्ट मेमोरी पते पर लोड होने के स्पष्ट निर्देश हैं। जहाँ तक....
ELF फाइलें निष्पादन योग्य लिंक करने योग्य प्रारूप होती हैं, जिनमें एक प्रतीक लुक-अप और रिलोकेबल टेबल होते हैं, अर्थात, इसे कर्नेल द्वारा किसी भी मेमोरी पते पर लोड किया जा सकता है और स्वचालित रूप से, सभी प्रतीकों का उपयोग किया जाता है, उस मेमोरी पते से ऑफसेट पर समायोजित किया जाता है जहां यह होता है में लोड किया गया था। आमतौर पर ईएलएफ फाइलों में कई खंड होते हैं, जैसे 'डेटा', 'टेक्स्ट', 'बीएसएस', नाम के लिए लेकिन कुछ ... यह उन सेक्शनों के भीतर होता है, जहां रन-टाइम यह गणना कर सकता है कि सिंबल के मेमोरी रेफरेंस को एडजस्ट किया जाए गतिशील रूप से रन-टाइम पर।
एक बिन फ़ाइल बस बिट्स और बाइट्स है जो रोम में जाते हैं या एक विशेष पते से जिसमें आप प्रोग्राम चलाएंगे। आप इस डेटा को ले सकते हैं और इसे सीधे रूप में लोड कर सकते हैं, आपको यह जानना होगा कि आधार पता क्या है, क्योंकि यह आमतौर पर वहां नहीं है।
एक योगिनी फ़ाइल में बिन जानकारी होती है, लेकिन यह बहुत सारी अन्य जानकारी, संभावित डिबग जानकारी, प्रतीकों से घिरा होता है, बाइनरी के भीतर डेटा से कोड को अलग कर सकता है। एक से अधिक बाइनरी डेटा के लिए अनुमति देता है (जब आप इनमें से किसी एक को डंप करते हैं तो आपको एक बड़ी बिन फ़ाइल मिलती है जो डेटा को अगले ब्लॉक पर पैड करने के लिए भरती है)। आपको बताता है कि आपके पास कितना बाइनरी है और कितना bss डेटा है जो कि zeros से आरंभ किया जाना चाहता है (gnu टूल्स में बिन फाइलों को सही तरीके से बनाने में समस्याएं हैं)।
योगिनी फ़ाइल प्रारूप एक मानक है, हाथ मानक पर अपने संवर्द्धन / बदलाव प्रकाशित करता है। मेरा सुझाव है कि हर कोई समझने के लिए एक योग्य कार्यक्रम लिखता है कि वहां क्या है, एक पुस्तकालय के साथ परेशान न करें, यह सिर्फ जानकारी और संरचनाओं का उपयोग करने के लिए काफी सरल है। सामान्य रूप से बनाने वाली .bin फ़ाइलों के साथ-साथ लिंकर स्क्रिप्ट और अन्य चीजें जो आपके बिन या योगिनी आउटपुट को गड़बड़ाने में मदद कर सकती हैं, में ग्नू की समस्याओं को दूर करने में मदद करता है।
कुछ संसाधन:
आमतौर पर ईएलएफ प्रारूप संकलन का डिफ़ॉल्ट आउटपुट है। यदि आप GNU टूल चेन का उपयोग करते हैं, तो आप इसे objcopy का उपयोग करके द्विआधारी प्रारूप में अनुवाद कर सकते हैं, जैसे:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
या fromELF उपयोगिता का उपयोग करके (हालांकि ADS जैसे अधिकांश IDE में निर्मित):
fromelf -bin -o [binary-output-file] [elf-input-file]
मैं यहां एक बिंदु को ठीक करना चाहता हूं। ELF फ़ाइल लिंकर द्वारा निर्मित होती है, संकलक द्वारा नहीं।
कम्पाइलर मिशन ऑब्जेक्ट फ़ाइलों (* .o) को स्रोत कोड फ़ाइलों से बाहर करने के बाद समाप्त होता है। लिंकर सभी .o फाइलों को एक साथ जोड़ता है और ईएलएफ का उत्पादन करता है।
NOP
बिना-f
(या-fbin
) के संकलित करते हैं, तो वह0x90
400 बाइट के साथ एक एकल बाइट के साथ संकलित करता है, जिसके साथ ELF कंटेनर है-felf32
। तो सिर्फ कच्चा कोड, कोई कंटेनर मेटाडेटा नहीं। NASM का कहना है कि इसका उपयोग ज्यादातर MS-DOS .COM और .SYS फाइलों के लिए किया जाता है।section
निर्देशों को ज्यादातर अनदेखा किया जाता है और केवल संरेखण उत्पन्न होता है।