बाइनरी फ़ाइल कैसे देखें?


45

जो मैं समझता हूं, एक कंपाइलर एक बाइनरी फ़ाइल बनाता है जिसमें 1 और 0 होता है जो एक सीपीयू पढ़ सकता है। मेरे पास एक बाइनरी फ़ाइल है लेकिन मैं इसे 1 और 0 को देखने के लिए कैसे खोलूं? एक पाठ संपादक का कहना है कि यह इसे नहीं खोल सकता है ...

PS मेरे पास एक असेंबली संकलित बाइनरी है जो 1 और 0 के सादे बाइनरी कोड होना चाहिए?


1
जब आप एक बाइनरी फ़ाइल प्रदर्शित करते हैं, तो आप इसे ascii वर्णों के रूप में देखेंगे
mazs

2
डुप्लिकेट इश्यू stackoverflow.com/questions/1765311/…
mazs

नहीं - ओपी निर्दिष्ट "असेंबली संकलित बाइनरी"। यह सवाल का समाधान नहीं है। उदाहरण के लिए, यह एक संगीत फ़ाइल नहीं है, और इसकी संरचना है। ओपी अतिरिक्त जानकारी प्रदान किए बिना, एक असंरचित उपकरण शुरू करने का स्थान है।
थॉमस डिकी

1
मेरा जवाब देखिए। और चेतावनी दी है कि द्विआधारी शब्द का प्रयोग दो तरह से किया जाता है व्यवहार में पूरी तरह से अलग: "एक बाइनरी फ़ाइल" का अर्थ है एक फ़ाइल जिसका संदर्भ शुद्ध ASCII- पाठ नहीं है। "एक द्विआधारी संख्या" का अर्थ है एक संख्या जिसका द्विआधारी रूप का उपयोग करके लिखा गया है।
पियरे-ओलिवियर वेरेस

@ एम्स ASCII? मुझे लगता है कि अगर यूटीएफ -8 अधिक संभावना है, या कुछ कोड पेज है, तो अगर प्रोग्राम को लगता है कि यह बाधा के माध्यम से उस तरह से एन्कोड किया गया है।
JDługosz

जवाबों:


99

के अनुसार इस जवाब से Tyranid :

hexdump -C yourfile.bin 

जब तक आप इसे संपादित नहीं करना चाहते। अधिकांश लिनक्स डिस्ट्रो hexdumpडिफ़ॉल्ट रूप से (लेकिन जाहिर है सभी नहीं)।


अपडेट करें

के अनुसार इस जवाब से एमिलियो बूल :

xxd बाइनरी और हेक्साडेसिमल दोनों करता है

बिन के लिए:

xxd -b file

हेक्स के लिए:

xxd file

यह वास्तव में मदद की! धन्यवाद
श्राविया Boggarapu

45

विभिन्न लोगों ने क्वेरी के कुछ पहलुओं का उत्तर दिया है, लेकिन सभी नहीं।

कंप्यूटर पर सभी फ़ाइलों को 1 और 0 के रूप में संग्रहीत किया जाता है। छवियाँ, पाठ फ़ाइलें, संगीत, निष्पादन योग्य अनुप्रयोग, ऑब्जेक्ट फ़ाइलें, आदि।

वे सभी 0 और 1 के हैं। अंतर केवल इतना है कि उन्हें अलग-अलग तरीके से व्याख्या की जाती है जो उन्हें खोलता है।

जब आप एक पाठ फ़ाइल का उपयोग करते हुए देखते हैं cat, तो निष्पादन योग्य ( catइस मामले में) सभी 1 और 0 को पढ़ता है और यह उन्हें आपके संबंधित वर्णमाला या भाषा के पात्रों में परिवर्तित करके आपके सामने प्रस्तुत करता है।

जब आप किसी छवि दर्शक का उपयोग करके किसी फ़ाइल को देखते हैं, तो यह सभी 1 और 0 को ले लेता है और उन्हें एक छवि में बदल देता है, जो फ़ाइल के प्रारूप पर निर्भर करता है और कुछ तर्क यह सब बाहर काम करने के लिए।

संकलित बाइनरी फाइलें अलग नहीं हैं, उन्हें 1 और 0 के रूप में संग्रहीत किया जाता है।

Arzyfex का उत्तर आपको उन फ़ाइलों को अलग-अलग तरीकों से देखने के लिए उपकरण देता है, लेकिन एक फ़ाइल को बाइनरी के रूप में पढ़ना कंप्यूटर पर किसी भी फ़ाइल के लिए काम करता है, जैसा कि इसे ओक्टल, या हेक्स, या वास्तव में ASCII के रूप में देखना है, यह सिर्फ प्रत्येक में समझ में नहीं आता है। उन स्वरूपों का।

यदि आप यह समझना चाहते हैं कि एक निष्पादन योग्य बाइनरी फ़ाइल क्या करती है, तो आपको इसे एक तरह से देखने की जरूरत है जो आपको असेंबलर भाषा (शुरुआत के रूप में) दिखाता है, जिसे आप उपयोग कर सकते हैं,

objdump -d /path/to/binary

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

कुछ बाहरी पठन।

NB: जैसा कि @Wildcard बताते हैं, यह नोट करना महत्वपूर्ण है कि फ़ाइलों में वर्ण 1 और 0 शामिल नहीं हैं (जैसा कि आप उन्हें स्क्रीन पर देखते हैं), उनके पास वास्तविक संख्यात्मक डेटा, व्यक्तिगत बिट्स की जानकारी होती है जो (1) या बंद (को ०)। यहां तक ​​कि वह वर्णन केवल सत्य का एक अनुमान है। वे महत्वपूर्ण बिंदु यह है कि यदि आप एक दर्शक ढूंढते हैं जो आपको 1 और 0 दिखाता है, यहां तक ​​कि वह अभी भी फ़ाइल से डेटा की व्याख्या कर रहा है और फिर आपको 0 और 1. के लिए ASCII वर्ण दिखा रहा है। डेटा एक बाइनरी प्रारूप में संग्रहीत है ( ऊपर बाइनरी नंबर लिंक देखें)। पियरे-ओलिवियर की सामुदायिक विकि प्रविष्टि इसे और अधिक विस्तार से कवर करती है।


अच्छा खुलासा। आप जोड़ना चाह सकते हैं कि आप जो अक्षर पाठ की एक पंक्ति में "1" या "0" के रूप में देखते हैं, उन्हें कंप्यूटर द्वारा एक "1" या "0" के रूप में संग्रहीत नहीं किया जाता है; ओपी को इस बारे में भ्रम है।
वाइल्डकार्ड

1
मैं आपके कथन से वक्रोक्ति (यानी असहमत) हूं, "जब आप किसी पाठ फ़ाइल का उपयोग करते हुए देखते हैं cat, तो निष्पादन योग्य ( catइस मामले में) सभी 1 और 0 को पढ़ता है और यह उन्हें आपके संबंधित वर्णमाला से वर्णों में परिवर्तित करके आपको प्रस्तुत करता है या भाषा: हिन्दी।" catवह नहीं करता है; सभी catआउटपुट मानक के लिए बाइट्स लिखता है (जब तक कि आप "हानिकारक" विकल्पों का उपयोग नहीं कर रहे हैं)। टर्मिनल प्रोग्राम (और / या टर्मिनल हार्डवेयर, यदि लागू हो, अर्थात, इसके फर्मवेयर) निर्धारित करता है कि कैसे बाइट्स को वर्णों के रूप में प्रस्तुत करना है, संभवतः TTY ड्राइवर की सहायता से।
जी-मैन का कहना है कि 'मोनिका'

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

14

निम्न स्तर पर, किसी फ़ाइल को 0 और 1 के अनुक्रम के रूप में एन्कोड किया जाता है।

लेकिन यहां तक ​​कि प्रोग्रामर शायद ही कभी अभ्यास में वहां जाते हैं।

पहली और 0 और 1 की कहानी की तुलना में अधिक महत्वपूर्ण है, आपको यह समझना होगा कि कंप्यूटर में जो कुछ भी हेरफेर करता है वह संख्याओं के साथ एन्कोडेड है ।

  • वर्ण सेट तालिकाओं का उपयोग करके एक वर्ण को एक संख्या के साथ कोडित किया जाता है। उदाहरण के लिए, 'A' अक्षर का मान 65 है जब ASCII का उपयोग करके कोडित किया गया है। Http://www.asciitable.com देखें

  • एक पिक्सेल को एक या अधिक संख्याओं के साथ कोडित किया जाता है (बहुत अधिक ग्राफिकल प्रारूप हैं) उदाहरण के लिए, मानक 3-रंगों के प्रारूप में, एक पीले पिक्सेल को इनकोड किया गया है: लाल के लिए 255, ग्रीन के लिए 255, ब्लू के लिए 0। Http://www.quackit.com/css/css_color_codes.cfm देखें (एक रंग चुनें और आर, जी और सेल देखें)

  • एक बाइनरी-निष्पादन योग्य फ़ाइल विधानसभा में लिखी जाती है; प्रत्येक विधानसभा निर्देश को संख्याओं के रूप में कोडित किया जाता है। उदाहरण के लिए, विधानसभा निर्देश MOVB $0x61,%alको दो संख्याओं द्वारा कोडित किया जाता है: 176,97 http://www.sparksandflames.com/files/x86InstructionChart.html देखें (प्रत्येक निर्देश में 00 से FF से संबद्ध संख्या है, क्योंकि हेक्साडेसिमल नोटेशन का उपयोग किया जाता है। निचे देखो)

दूसरी बात : प्रत्येक संख्या में कई अभ्यावेदन या अंकन हो सकते हैं ।

कहो कि मेरे पास 23 सेब हैं।

  • अगर मैं दस सेबों का समूह बनाता हूँ, तो मुझे मिलेगा: दस और ३ अकेला सेबों के २ समूह। ठीक यही मतलब है कि जब हम 23: 2 (दहाई) लिखते हैं, तो 3 (इकाइयां) लिखते हैं।
  • लेकिन मैं 16 सेब के समूह भी बना सकता हूं। इसलिए मुझे एक ग्रुप-ऑफ -16 और 7 लोन सेब मिलेंगे। में हेक्साडेसिमल संकेतन (कि कैसे 16 मूलांक कहा जाता है), मैं लिखेंगे: 17 (16 + 7)। दशमलव संकेतन से अलग करने के लिए, हेक्साडेसिमल संकेतन को आमतौर पर एक उपसर्ग या एक प्रत्यय के साथ नोट किया जाता है: 17h, # 17 या $ 17। लेकिन 9 से अधिक समूह -16 का प्रतिनिधित्व कैसे करें, या 9 से अधिक अकेले सेब? बस, हम A (10) से F (15) के अक्षरों का उपयोग करते हैं। 31 नंबर (31 सेब में) हेक्साडेसिमल में # 1F के रूप में लिखा गया है।

  • इसी लाइन पर, हम ग्रुप-ऑफ-टू-ऐप्पल कर सकते हैं। (और दो समूह-दो सेबों का समूह, यानी समूह-2x2-सेब, और इसी तरह)। फिर 23 है: 1 समूह-ए-2x2x2x2-सेब, 0 समूह-की-2x2x2-सेब, 1 समूह-की-2x2-सेब, 2 समूह का 1 समूह, और 1 अकेला सेब जो बाइनरी में 10111 नोट किया जाएगा।

(देखें https://en.wikipedia.org/wiki/Radix )

शारीरिक रूप से, दो राज्यों (स्विच) की अनुमति देने वाले तंत्र आसान हैं, साथ ही डिस्क पर मेमोरी मेमोरी में।

इसलिए डेटा और प्रोग्राम, जिन्हें संख्याओं के रूप में देखा जाता है, उनके बाइनरी रूप में लिखे और हेरफेर किए जाते हैं।

फिर अनुवादित - डेटा प्रकार पर निर्भर करता है - उनके उपयुक्त रूप (अक्षर ए, पीले पिक्सेल) या निष्पादित (एमओवी निर्देश) में।

hexdumpयह हेक्साडेसिमल रूप में डेटा (या असेंबली प्रोग्राम) कोडिंग संख्याओं को सूचीबद्ध करता है। फिर आप संबंधित बाइनरी फॉर्म प्राप्त करने के लिए एक कैलकुलेटर का उपयोग कर सकते हैं।



4

आप इसे एक हेक्स संपादक में खोल सकते हैं जो इसे हेक्साडेसिमल मूल्यों की एक श्रृंखला के रूप में दिखाता है। xxd file

आप क्या खत्म करने की कोशिश कर रहे हैं?


लेकिन मुझे लगा कि कंप्यूटर केवल 1 का और 0 का पढ़ सकता है। क्या मैं उन्हें देख सकता हूँ? मैं यह समझने की कोशिश कर रहा हूं कि कंप्यूटर कैसे काम करते हैं
मार्टिन ज़ेल्टिन

2
अकेले यह आपकी बहुत मदद नहीं करेगा। यदि आप सीखना चाहते हैं कि यह वास्तव में कैसे काम करता है, तो लिनक्स बॉक्स पर ELF फ़ाइल प्रारूप, और en.wikipedia.org/wiki/X86_instruction_listings पर एक नज़र डालें । यदि आप केवल उस कोड को देखना चाहते हैं जो संकलक द्वारा उत्पन्न होता है, तो इसे gdb के साथ चलाने पर एक नज़र है। चूंकि आप अधिक "निम्न स्तर" प्राप्त करना चाहते हैं, साथ ही साथ nand2tetris.org भी देखें। असेंबली लैंग्वेज के लिए मैंने सुना है कि 6502 और
मिप्स

@theblazehen मॉडर्न x86 फैमिली असेंबलर एक जानवर है। 8086 प्रबंधनीय था, और मुझे लगता है कि उस युग के आसपास के किसी भी सीपीयू के बारे में (1970 के दशक के अंत से 1980 के दशक के उत्तरार्ध तक) सहनीय होना चाहिए जहां तक ​​कोडांतरक जाता है।
बजे एक CVn

4

bvivim कीबाइंडिंग के साथ एक द्विआधारी VIsual संपादक है। यह अधिकांश लिनक्स सिस्टम पर उपलब्ध है।

यहाँ छवि विवरण दर्ज करें


3

लिनक्स स्ट्रिंग्स कमांड फाइलों में प्रिंट करने योग्य पात्रों के तार प्रिंट करता है, जैसे:

$ strings /usr/bin/gnome-open 
/lib64/ld-linux-x86-64.so.2
3;o:)
libgnome-2.so.0
_ITM_deregisterTMCloneTable
g_object_unref
gmon_start__
g_dgettext
_Jv_RegisterClasses
g_strdup
_ITM_registerTMCloneTable
g_error_free
gnome_program_init
libgnome_module_info_get
libgio-2.0.so.0
g_ascii_strncasecmp

आदि ... यह बाइनरी की तुलना में बहुत अधिक पठनीय है।


ओपी ने पूछा कि मैं इसे 1 और 0 को देखने के लिए कैसे खोलता हूं? लेकिन stringsवह जो भी बाइट देखना चाहता है, उसकी अधिकांश कमांड को वह हटा देगा।
जलीगेरे

@jlliagre - जब आप सही होते हैं, तो stringsकमांड - विशेष रूप से लंबी लंबाई के साथ strings -n 6- जैसे वास्तव में यह पता लगाने में मदद करता है कि इसमें बाइनरी फ़ाइल क्या है यदि इसमें कोई स्ट्रिंग स्थिरांक शामिल है, आदि .. यह उत्तर एक टिप्पणी होना चाहिए था, तो यह होगा ठीक रहा।
जो

@ हाँ, मैं stringsकमांड उपयोगिता पर सवाल नहीं उठाता, बस यह ओपी सवाल का जवाब नहीं देता है।
जलीगेरे

3

एक महत्वपूर्ण हिस्सा जिसके बारे में आप अभी भी भ्रमित हैं: हेक्साडेसिमल मान द्विआधारी मूल्यों का एक अलग प्रतिनिधित्व है। अधिकांश हेक्स संपादक या हेक्सडम्प्स हेक्साडेसिमल बेस में मान प्रदर्शित करेंगे, क्योंकि यह बाइनरी बेस की तुलना में अधिक पठनीय है।

उदाहरण के लिए:

बाइनरी:

xxd -b README.md                                                                
00000000: 00100011 00100000

जो दशमलव में 35 और 32 है

xxd README.md                                                                   
00000000: 2320

दशमलव में भी 35 और 32


अन्य लोगों ने इसका उल्लेख किया है। हालाँकि, यह एक अच्छा सारांश है। यदि आप पहले पैराग्राफ को बदलना चाहते हैं तो आप अपने उत्तर को संपादित कर सकते हैं।
wizzwizz4

बहुत अच्छी तरह से, मैंने किसी को इसका उल्लेख करते नहीं देखा है, मैं इसे याद कर सकता हूं।
गुरुवार अगला

ध्यान दें कि आपको vimउपयोग करने के लिए इंस्टॉल करने की आवश्यकता है xxd
स्टारबिम्रेनबोलाब्स

2

आप फ़ाइल को बाइनरी में देख सकते हैं vim:

  • में फ़ाइल खोलना vim
  • में प्रवेश कर :% !xxd -b

xxdआदेश में आगे बदलाव किया जा सकता है, उदाहरण के लिए:

  • जोड़कर -g4, जो बिट्स को 32-बिट पैक में समूहित करेगा
  • जोड़कर -c4, जो आउटपुट को प्रारूपित करेगा, प्रति पंक्ति 4 बाइट्स के लिए

ऊपर के दोनों झंडे जोड़ने से, आपको प्रति पंक्ति एक 32-बिट पूर्णांक मिलेगा।


1

आप इसे उदाहरण के लिए कर सकते हैं, यह माणिक वन-लाइनर:

$ ruby -e 'while c=STDIN.read(1); printf "%08b" % c.bytes.first; end'

पारंपरिक C आधारित प्रणाली में बाइनरी, AFAIK में सामान के उत्पादन के लिए घटिया समर्थन है। यह आमतौर पर बहुत उपयोगी नहीं है क्योंकि हेक्साडेसिमल डंप के विपरीत इसे पढ़ना काफी कठिन है।


धन्यवाद! %08bबाइट्स में आउटपुट को समूहीकृत करने के कारण सीधे स्पेस जोड़ने के बाद ।
स्टारबिम्रेनबोलाब्स

0

GHex आपका दोस्त है :)
आप इसे कमांड लाइन

Ubuntu का उपयोग करके स्थापित कर सकते हैं :

sudo apt-get install घी

फेडोरा:

सुडो यम स्थापित घी

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