यह कैसे निर्धारित किया जाए कि एक लिनक्स बाइनरी फ़ाइल 32-बिट या 64-बिट है?


24

32-बिट कर्नेल (x86) केवल 32-बिट कोड चला सकता है। 64-बिट कर्नेल (x86_64) 32-बिट और 64-बिट कोड दोनों को चला सकता है।

मैं जानना चाहता हूं कि क्या कोई मशीन निष्पादन योग्य चला सकती है: दूसरे शब्दों में, मेरे पास एक बाइनरी फ़ाइल है और मुझे इसे 32-बिट उबंटू पर चलाना है, लेकिन मुझे नहीं पता कि बाइनरी फ़ाइल 32-बिट निष्पादन योग्य है या नहीं ।

मैंने fileकमांड का उपयोग किया , निष्पादन योग्य को जांचने के लिए निर्दिष्ट किया और यह लौटा परिणाम था:

जीएनयू / लिनक्स के लिए एलएलएफ 64-बिट एलएसबी निष्पादन योग्य, x86-64, संस्करण 1 (SYSV), गतिशील रूप से जुड़ा हुआ (साझा उपयोग का उपयोग करता है), बिल्डआईडी [sha1] = 0x7329fa71803a6cd64823c2594338682065cd6e07, छीन नहीं लिया गया।

जवाबों:


29

शीर्षक के प्रश्न का उत्तर आउटपुट की शुरुआत में वहीं है:

ईएलएफ 64-बिट एलएसबी निष्पादन योग्य, x86-64

ईएलएफ निष्पादन योग्य और लिंक करने योग्य प्रारूप है , बाइनरी निष्पादन योग्य फ़ाइल प्रारूप जो लिनक्स द्वारा सबसे अधिक उपयोग किया जाता है।

x86-64 द्विआधारी की वास्तुकला है, मूल रूप से AMD द्वारा प्रस्तुत x86 निर्देश सेट का 64-बिट संस्करण है । जो कारण मेरे से परे हैं, Microsoft इसे "x64" के रूप में संदर्भित करता है, लेकिन यह वही बात है।

यदि आपको कर्नेल की वास्तुकला को स्वयं जानना आवश्यक है, तो आप उपयोग कर सकते हैं uname -mpi। उदाहरण के लिए, मेरे सिस्टम पर, वह प्रिंट करता है:

x86_64 अज्ञात अज्ञात

जिसका अर्थ है कि मैं x86-64 कर्नेल चला रहा हूं।

यदि आप स्वयं CPU में रुचि रखते हैं, /proc/cpuinfoतो Linux कर्नेल द्वारा ज्ञात CPU (s) के बारे में विवरण देखें।

एक 32-बिट 80x86 निष्पादन योग्य के रूप में पहचाना fileजाता है, उदाहरण के लिए:

एलएनएफ 32-बिट एलएसबी निष्पादन योग्य, इंटेल 80386 , संस्करण 1 (एसवाईएसवी), गतिशील रूप से जुड़ा हुआ (जीएनयू / लिनक्स 2.6.8 के लिए) का उपयोग करता है, छीन लिया गया

जो हमें बताता है कि यह इंटेल 80386 निर्देश सेट (संभवतः एक्सटेंशन के साथ) का उपयोग करके 32-बिट निष्पादन योग्य है।

ध्यान दें कि यह 32-बिट बनाम 64-बिट आर्किटेक्चर जितना सरल नहीं है। उदाहरण के लिए, लिनक्स कर्नेल 32 बिट्स जैसे इंटेल 80386, AVR32 , S / 390 और Unicore32 का समर्थन करता है । चीजों के 64-बिट पक्ष पर, लिनक्स पीए-आरआईएससी , x86-64, इटेनियम और अल्फा सहित अन्य पर प्रयोग करने योग्य है। सभी वितरण सभी आर्किटेक्चर के लिए बायनेरिज़ प्रदान नहीं करते हैं, हालांकि (और मुझे संदेह है कि कोई भी वितरण हैं जो सभी समर्थित सीपीयू आर्किटेक्चर को समान रूप से लक्षित करते हैं )। इसलिए यदि आप यह जानना चाहते हैं कि क्या किसी दिए गए बाइनरी किसी दिए गए सिस्टम पर निष्पादन योग्य होंगे, तो आपको सीपीयू के मूल शब्द आकार के बजाय वास्तुकला पर विचार करने की आवश्यकता है ।


1
"कारण जो मेरे से परे हैं"। मुझे आज भी याद है कि मुझे पता चला था कि x64 64 बिट्स था और x86 32 बिट्स था।
पॉल ड्रेपर

1
@PaulDraper "x86" शब्द की स्पष्ट व्युत्पत्ति है; यह इंटेल से 80x86 श्रृंखला सीपीयू के लिए वापस आता है, उन्हें 8008 या 8080 जैसे अपने पूर्ववर्तियों से अलग करता है, और इन दिनों सबसे अधिक बार 32-बिट (आईए -32 निर्देश सेट) सक्षम वेरिएंट (80386, 80486, पेंटियम और नए को संदर्भित करता है) )। ये अधिक हाल के मॉडल नंबर अक्सर शुरुआत में "80" को छोड़ कर संक्षिप्त किए जाते थे, इसलिए (32-बिट निहित) x86 का मिलान 386, 486, आदि से होता है। हालाँकि, मुझे 64-बिट सीपीयू की जानकारी नहीं है, जिसमें मॉडल नंबर हैं "64" में समाप्त होने वाली एक समान संरचना; निश्चित रूप से न तो AMD और न ही इंटेल आज इस तरह के नामकरण योजना का उपयोग करते हैं।
बजे एक CVn

हालांकि 64 है एक बहुत ही आम शब्द। रैंडम उदाहरण: microsoft.com/en-us/download/details.aspx?id=42482
पॉल ड्रेपर

@PaulDraper यह Microsoft की दुनिया में अब आम है, लेकिन इसकी व्युत्पत्ति इस तरह से स्पष्ट नहीं है कि "x86" के लिए नहीं है।
बजे एक CVn

Microsoft x86_64 को उनके संस्थापकों में AMD64 के रूप में संदर्भित करता है
phuclv

7

लिनक्स बाइनरी एक्ज़ीक्यूटेबल फ़ाइल ( ईएलएफ फॉर्मेट, विकिपीडिया देखें ) की 5 वीं बाइट 32 बिट के निष्पादन योग्य के लिए 1, 64 बिट निष्पादन योग्य के लिए 2 है।

"फू" नामक प्रोग्राम के लिए इसे देखने के लिए कमांड लाइन पर टाइप करें

od -t x1 -t c foo | head -n 2

2

यदि आप 'हेड' पाइप से बचना चाहते हैं, तो आप कर सकते हैं

od -An -t x1 -j 4 -N 1 foo

यह 01 को मुद्रित करेगा यदि फू 32-बिट बाइनरी है और 02 यदि यह 64 है। यह अभी भी कुछ प्रमुख रिक्त स्थान शामिल कर सकता है - यदि आप परिणामों पर कोई स्वचालित तुलना कर रहे हैं तो यह जानने लायक है।

यदि यह एक बुनियादी उबंटू डॉकटर कंटेनर में उपयोगी पाया जाता है जहां 'फ़ाइल' स्थापित नहीं थी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.