it-swarm.com.de

Wie kann ich eine Binärdatei anzeigen?

Soweit ich weiß, erstellt ein Compiler eine Binärdatei, die aus Einsen und Nullen besteht, die eine CPU lesen kann. Ich habe eine Binärdatei, aber wie öffne ich sie, um die Einsen und Nullen zu sehen, die dort sind? Ein Texteditor sagt, er kann es nicht öffnen ...

P.S. Ich habe eine Assembly kompilierte Binärdatei, die ein einfacher Binärcode von 1 und 0 sein sollte.

51
Martin Zeltin

Nach diese Antwort von Tyranid :

hexdump -C yourfile.bin 

es sei denn, Sie möchten es natürlich bearbeiten. Die meisten Linux-Distributionen haben standardmäßig hexdump (aber offensichtlich nicht alle).


Aktualisieren

Nach diese Antwort von Emilio Bool :

xxd macht sowohl binär als auch hexadezimal

Für bin:

xxd -b file

Für hex:

xxd file
107
Rahul

Verschiedene Personen haben einige Aspekte der Abfrage beantwortet, jedoch nicht alle.

Alle Dateien auf Computern werden als Einsen und Nullen gespeichert. Bilder, Textdateien, Musik, ausführbare Anwendungen, Objektdateien usw.

Sie sind alle Nullen und Einsen. Der einzige Unterschied besteht darin, dass sie je nachdem, was sie öffnet, unterschiedlich interpretiert werden.

Wenn Sie eine Textdatei mit cat anzeigen, liest die ausführbare Datei (in diesem Fall cat) alle Einsen und Nullen und zeigt sie Ihnen an, indem sie sie in Zeichen aus Ihrem relevanten Alphabet oder Ihrer Sprache konvertiert .

Wenn Sie eine Datei mit einem Bildbetrachter anzeigen, werden alle Einsen und Nullen verwendet und in ein Bild umgewandelt, abhängig vom Format der Datei und einer Logik, um alles zu erarbeiten.

Kompilierte Binärdateien unterscheiden sich nicht, sie werden als Einsen und Nullen gespeichert.

die Antwort von arzyfex bietet Ihnen die Werkzeuge, um diese Dateien auf unterschiedliche Weise anzuzeigen. Das Lesen einer Datei als Binärdatei funktioniert jedoch für jede Datei auf einem Computer, ebenso wie das Anzeigen als Oktal, Hex oder ASCII dieser Formate.

Wenn Sie verstehen möchten, was eine ausführbare Binärdatei tut, müssen Sie sie so anzeigen, dass Ihnen die Assembler-Sprache (als Start) angezeigt wird, die Sie verwenden können.

objdump -d /path/to/binary

dies ist ein Disassembler. Er nimmt den binären Inhalt und konvertiert ihn zurück in einen Assembler (eine Programmiersprache auf sehr niedriger Ebene). objdump ist nicht immer standardmäßig installiert und muss daher möglicherweise abhängig von Ihrer Linux-Umgebung installiert werden.

Einige externe Lesungen.

NB: Wie @Wildcard hervorhebt, ist es wichtig zu beachten, dass die Dateien nicht die Zeichen 1 und 0 enthalten (wie Sie sie auf dem Bildschirm sehen). Sie enthalten tatsächliche numerische Daten, einzelne Informationsbits, die entweder ein (1) oder aus (0) sind. Auch diese Beschreibung ist nur eine Annäherung an die Wahrheit. Der entscheidende Punkt ist, dass, wenn Sie einen Viewer finden, der Ihnen die Einsen und Nullen anzeigt, auch dieser die Daten aus der Datei interpretiert und Ihnen dann die Zeichen ASCII für 0 und 1) anzeigt. Die Daten werden in einem Binärformat gespeichert (siehe den Link Binärzahl oben). Pierre-Oliviers Community-Wiki-Eintrag behandelt dies ausführlicher.

46
EightBitTony

Auf niedriger Ebene wird eine Datei codiert als Folge von Nullen und Einsen.

Aber selbst Programmierer gehen in der Praxis selten dorthin.

Zuerst (und wichtiger als diese Geschichte von Nullen und Einsen) müssen Sie verstehen, dass alles, was der Computer manipuliert, mit codiert ist Zahlen.

  • Ein Zeichen wird mithilfe von Zeichensatztabellen mit einer Nummer codiert. Beispielsweise hat der Buchstabe 'A' einen Wert von 65, wenn er mit ASCII codiert wird. Siehe http://www.asciitable.com

  • Ein Pixel wird mit einer oder mehreren Zahlen codiert (es gibt viele Grafikformate). Beispielsweise wird im Standard-3-Farben-Format ein gelbes Pixel wie folgt codiert: 255 für Rot, 255 für Grün, 0 für Blau. Siehe http://www.quackit.com/css/css_color_codes.cfm (wählen Sie eine Farbe und sehen Sie sich die R-, G- und B-Zellen an)

  • Eine binär ausführbare Datei wird in Assembly geschrieben. Jede Montageanweisung ist als Zahlen codiert. Zum Beispiel die Assembly-Anweisung MOVB $0x61,%al wird durch zwei Zahlen codiert: 176,97 Siehe http://www.sparksandflames.com/files/x86InstructionChart.html (Jeder Anweisung ist eine Zahl von 00 bis FF zugeordnet, da die hexadezimale Notation verwendet wird, siehe unten)

Zweitens : Jede Zahl kann mehrere Darstellungen oder Notationen haben.

Angenommen, ich habe 23 Äpfel.

  • Wenn ich Gruppen von zehn Äpfeln mache, bekomme ich: 2 Gruppen von zehn und 3 einsame Äpfel. Genau das meinen wir, wenn wir 23 schreiben: eine 2 (Zehner), dann eine 3 (Einheiten).
  • Ich kann aber auch Gruppen von 16 Äpfeln machen. Also bekomme ich eine Gruppe von 16 und 7 einzelne Äpfel. In hexadezimaler Notation (so nennt man die 16 Radix) schreibe ich: 17 (16 + 7). Zur Unterscheidung von der Dezimalschreibweise wird die Hexadezimalschreibweise im Allgemeinen mit einem Präfix oder einem Suffix angegeben: 17h, # 17 oder $ 17. Aber wie kann man mehr als 9 Gruppen von 16 oder mehr von 9 Äpfeln allein darstellen? Wir verwenden einfach Buchstaben von A (10) bis F (15). Die Zahl 31 (wie bei 31 Äpfeln) wird hexadezimal als # 1F geschrieben.

  • Auf der gleichen Linie können wir eine Gruppe von zwei Äpfeln machen. (Und Gruppe von zwei Gruppen von zwei Äpfeln, d. H. Gruppe von 2x2 Äpfeln und so weiter). Dann ist 23: 1 Gruppe von 2x2x2x2-Äpfeln, 0 Gruppe von 2x2x2-Äpfeln, 1 Gruppe von 2x2-Äpfeln, 1 Gruppe von 2x2-Äpfeln, 1 Gruppe von 2 Äpfeln und 1 einsamer Apple Welches wird 10111 in binär notiert.

(Siehe https://en.wikipedia.org/wiki/Radix )

Physikalisch sind Mechanismen, die zwei Zustände (Switches) zulassen, ebenso einfach wie auf Festplatten, die sich im Speicher befinden.

Deshalb werden Daten und Programme, die als Zahlen betrachtet werden, in ihrer binären Form geschrieben und bearbeitet.

Dann - je nach Datentyp - in die entsprechende Form (Buchstabe A, gelbes Pixel) übersetzt oder ausgeführt (MOV-Anweisung).

hexdump listet die Zahlen, die die Daten (oder das Assembly-Programm) codieren, in hexadezimaler Form auf. Sie können dann einen Taschenrechner verwenden, um die entsprechende Binärform zu erhalten.

14

Ich würde mit od (oktaler Speicherauszug) beginnen und je nach System Tools wie objdump nützlich finden.

10
Thomas Dickey

Der Befehl Linux strings druckt die Zeichenfolgen druckbarer Zeichen in Dateien, z.

$ 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

etc ... es ist ziemlich besser lesbar als binär.

4
ponsfrilus

Sie können es in einem Hex-Editor öffnen, der es als eine Reihe von Hexadezimalwerten anzeigt. xxd file

Was versuchst du zu erreichen?

4
theblazehen

bvi ist ein binärer VIsual-Editor mit vim-Tastenkombinationen. Es ist auf den meisten Linux-Systemen verfügbar.

(enter image description here

4
Gilles Castel

Ein wichtiger Teil, über den Sie immer noch verwirrt zu sein scheinen: Hexadezimalwerte sind nur eine andere Darstellung von Binärwerten. Die meisten Hex-Editoren oder Hexdumps zeigen Werte in der Hexadezimalbasis an, da diese besser lesbar sind als in der Binärbasis.

Z.B.:

Binär:

xxd -b README.md                                                                
00000000: 00100011 00100000

Welches ist 35 und 32 in Dezimalzahl

xxd README.md                                                                   
00000000: 2320

Auch 35 und 32 in Dezimalzahl

3
Thursday Next

Sie können die Datei in Binärform in vim anzeigen, indem Sie:

  • Öffnen der Datei in vim
  • Eingabe von :% !xxd -b

Der Befehl xxd kann weiter optimiert werden, zum Beispiel:

  • Beim Hinzufügen -g4, wodurch die Bits in 32-Bit-Paketen gruppiert werden
  • Beim Hinzufügen -c4, das die Ausgabe so formatiert, dass sie 4 Bytes pro Zeile enthält

Wenn Sie beide oben genannten Flags hinzufügen, erhalten Sie eine 32-Bit-Ganzzahl pro Zeile.

2
Leandros

Sie können dies beispielsweise mit diesem Ruby Einzeiler:

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

Herkömmliche C-basierte Systeme unterstützen die Ausgabe von Binärdaten (AFAIK) nur mies. Es ist normalerweise nicht sehr nützlich, da es im Gegensatz zu hexadezimalen Dumps ziemlich schwer zu lesen ist.

1
PSkocik

GHex ist dein Freund :)
Sie können es über die Befehlszeile installieren

Ubuntu:

Sudo apt-get install ghex

Fedora:

Sudo yum installiere Ghex

0
craken