Frage von gerlochi, 29

Wie sind Binary-Dateien aufgebaut?

Hallo, ich wollte mal fragen:

Wenn ein Programm (z.b. von gcc), von Menschlesbaren, zu Maschienencode umfunktioniert, wohin verschwinden die 0'en und 1'en? Wenn man eine entstandene binary Datei mit einem Texteditor öffnet, kommen nur Sonderzeichen, Buchstaben und Zahlen. Werden diese Zeichen von dem System in 0'en und 1'en umgewandelt, oder sind es wie bei Windows die EXE-Dateien(nur bis Archive, Inhalt für mich Unbekannt), nur Archive die mit den richtigen Dateien gefüllt sind? Wie läuft das kompilieren ab vom Quellcode zu den Nullen und Einsen ab, und wo befinden die sich dan, bzw, wie werden die Dateien ausgeführt?

Diese Frage stelle ich mir, seit ich Computer kennengelehrnt habe, ihre mysteriöse funktionsweise.... Das ist eine meiner der Fragen, wie "Warum kann der Computer Nullen und Einsen lesen?". Da gibts noch so vieles ungelöstes für mich :).

Mit einer Antwort erfüllt ihr mir einen riesigen Gefallen. Danke und MfG gerlochi.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Zuck3r, 26

Wenn du c Code, der ja effektiv nichts weiter ist als Text und Steuerzeichen in Bytecode umwandelst erhälst du eine Ausführbare Datei. Diese datei enthält nullen und einsen. 

Wenn du versuchst diese mit einem Texteditor zu öffnen, versucht dieser die nullen und einsen als Buchstaben zu interpretieren, da das aber eigentlich keine Buchstaben sind, bekommst du ein ziemlcihes Wirrwarr.

Wo die Dateien liegen, hängt davon ab was du machst, bei gcc kannst du das zielverzeichnis angeben. Bei Java Projekten liegt der code also die class-Files in einem OutVerzeichnis, oder wenn du mit maven baust in einem target-verzeichnis.

Kompiliert wird das ganze mit einem Kompiler, der weiß wie der Code bzw einzelne Codebausteine zu interpretieren sind. Wie genau das funktioniert, kann ich dir leider auch nicht sagen.

Und ein Computer versteht nullen und einsen, weil das seine natürliche Sprache ist. Effektiv könnte man eine Glühbirne auch als Ram benutzen, mit der Größe 1 bit. Du kannst in einem bit genau 2 Zustände speichern, an und aus, 0 und 1. Wenn du viele davon aneinander setzte kannst du halt immer mehr Werte speichern. bei 2 lampen bereits 0 bis 3.

Wenn du die Lampen dann noch mit Logik gattern und schaltungen versiehst kannst mit den lampen addieren.

Letzten endes wird alles was du an einem PC machst irgendwie auf nullen und einsen zurückgeführt.

Kommentar von gerlochi ,

jetzt geht mir ein licht auf! danke

Expertenantwort
von Linuxhase, Community-Experte für PC, 26

Hallo

wohin verschwinden die 0'en und 1'en?

Da empfehle ich erweiternd zu guenterhalt's Antwort noch diesen Link:

https://paulschou.com/tools/xlate/

Da kannst Du einen Text eingeben und der wird dir in Binärcode (Nullen & Einsen) und/oder auch Hex-Code uvm. umgewandelt. Du kannst aber auch einen Binärcode eingeben und bekommst als Ausgabe die jeweils anderen Codes.

Hier ein Binärcode für Dich:

01001000 01100001 01101100 01101100 01101111 00100000 01010111 01100101 01101100 01110100

Wenn Du also:

Wenn man eine entstandene binary Datei mit einem Texteditor öffnet, kommen nur Sonderzeichen, Buchstaben und Zahlen.

Dann benutze mal einen HEX-Editor, denn ein Texteditor erwartet natürlich ASCII-Texte und kann keinen Binärcode lesen.

Linuxhase

Expertenantwort
von guenterhalt, Community-Experte für Computer & Linux, 10

Wie läuft das kompilieren ab vom Quellcode zu den Nullen und Einsen ab,
und wo befinden die sich dan, bzw, wie werden die Dateien ausgeführt?

Diesen Teil deiner Frage muss man wohl gesondert beantworten.
Compiler sind "Wunderwerke" , das alles zu erklären würde Bücher füllen. Hier nur kurz einige Aufgaben:

- Prüfung der "Rechtschreibung" eines Quellcodes
- Prüfung der Typ-Verträglichkeit ( man kann z.B. nicht 16 Bit in einen 8-Bit
                                                        Speicher laden usw.)
- Prüfung von Namen ( z.B. zur Bezeichnung von Speicherplätzen -Variablen)
- Prüfung auf richtigen Gebrauch von Schlüsselworten
  ( if , then , else, while , do foreach ...)

- Zusammenfügen einzelner Dateien ( include , source ... )

Das alles hat aber noch nichts mit der Übersetzung in einen binär-Code zu tun, denn das muss, (mit Einschränkungen) für jeden Computer, ob mit i8086, i80386 ... Pentium , 16- , 32-, 64-Bit ob im PC oder Mac oder Raspberry .... gleich sein.
Hinzu kommen noch die Besonderheiten des Betriebssystems ( Windows, Linux, OS-X ... )

Aus einem sogenannten Zwischencode wird dann der Maschinen-Code erstellt.
Alle Daten bestehen immer aus Nullen und Einsen. Wie ich in der ersten Antwort bereits geschrieben habe, besteht Quellcode aus, für den Menschen lesbaren,  Buchstaben, Ziffern und Zeichen.
Alle anderen Daten sind nicht so leicht lesbar und man kann sie auch sehr schlecht verstehen.

Wenn ich z.B. die hexadezimal-Folge

31 31

lese und weiß, dass das Maschinenbefehle für den Prozessor Z80 sind, dann weiß ich, dass damit ein 8-Bit-Speicher ( der Akkumulator) mit einer "1" geladen wird.

Ein C-Compiler hat diese Folge möglicherweise aus dem Befehl:

x='1' ; 

generiert.

Antwort
von Tschoo, 29

Hallo!

".. kommen nur Sonderzeichen, Buchstaben und Zahlen. "

Höchstwahrscheinlich, da dein Texteditor 8 oder 16 0er und 1er zusammenfasst, und dies dann eben solche Zeichen ergibt. Blank ist z.B. 27dez, kannst ja mal in binär umwandelnt (8 Bit, 8 0er und 1er).

0 und 1 ist ein Synonym für "an" "aus".

Ein Rechner ist aus Transistoren aufgebaut (die sind alle in so einem schwarzen Kasten versteckt), ein Transistor hat drei Eingänge, wobei einer steuert, ob Strom fliesst oder nicht, eben, ob er eine 0 oder eine 1 bekommt.

Wennm du wirklich wissen willst, wie so ein Rechner grundsätzlich funktioniert, schau dir Transistoren an, schau dir einfache Schaltungen an (AND-Gatter), versuche daraus einen Addierer zui bauen und dann hast du es kapiert.

Gruß

Kommentar von Tschoo ,

... übrigens sind natürlich Text- oder ASCII-Dateien auch ein Folge von Nullen und Einsen, sie werden nur von den jeweiligen Programmen (Editor oder z.B. Word) nur so interpretiert, dass lesbarer Text rauskommt --> schönes Beispiel, öffne mal eine Worddatei mit dem Editor von Windows, der Editor kann nicht alles interpretieren, was Word so noch hat (vor allem Gliederung usw.)

Expertenantwort
von guenterhalt, Community-Experte für Computer & Linux, 25

jedes Zeichen, ob Zahlen, Buchstaben  oder Sonderzeichen werden immer als "Nullen" und "Einsen" in einem Computer gespeichert.

Das A wird z.B. durch die binäre Folge 0100 0001  dargestellt. Die 0 ( Null) hat den Code 0011 0001.

Eine Datei, die nur aus Zahlen, Buchstaben und  Sonderzeichen besteht ist eine sogenannte ascii-Datei ( das ist ein Standard ).

Quell-Programme bestehen auch nur als ascii-Zeichen. Bei der Übersetzung in einen Maschinencode entstehen nahezu alle Werte zwischen 0000 0000 bis 1111 1111.

Wenn ein Text-Editor ascii-Code findet, dann zeigt er das als lesbares Zeichen an. Andere werden entweder nicht angezeigt oder aber in Form von irgendwelchen (nicht lesbaren ) Zeichen.

Antwort
von Pralinehappen, 1

Das einzige was ein Computer versteht sind Nullen (Keine Spannung) und Eins (Spannung). Mit vielen davon kann man, auf sehr umständliche Wege alle mathematische Operationen machen oder Texte umsetzen. Um zu verstehen wie das passiert muss man viele Jahre sich damit beschäftigen.

Antwort
von Willibergi, 23

Das sind mehrere Semester technische Informatik, was du hier fragst.
So etwas kann man nicht in einer einzigen Antwort erklären.
Dazu findest du im Internet genug, z. T. auch Universitätsskripte von Vorlesungen.
Suche dazu einfach im Internet, dort wirst du mit Sicherheit fündig.
Ich hoffe, ich konnte dir helfen.
LG Willibergi

Kommentar von gerlochi ,

danke

Kommentar von Willibergi ,

Gern geschehen. ;)

Keine passende Antwort gefunden?

Fragen Sie die Community