Also, wenn ich alles richtig verstanden habe
Nicht ganz.
Es ist eine Binärdatei und ihre Daten sind für uns Menschen unverständlich
Normalerweise ist eine Binärdatei für Mensch und Maschine unverständlich, insbesondere wenn der Zweck der Datei unbekannt ist. Beachten Sie, dass nicht alle Binärdateien ausführbare Dateien sind. Viele Binärdateien sind Datendateien, die keine Maschinenanweisungen enthalten. Aus diesem Grund werden beim Benennen von Dateien (in einigen Betriebssystemen) Dateierweiterungen verwendet. Das . Die com- Erweiterung wurde von CP / M verwendet, um eine ausführbare Datei zu kennzeichnen. Das . Die Erweiterung exe wurde von MS-DOS hinzugefügt, um ein anderes ausführbares Dateiformat zu kennzeichnen. * nixes verwenden das execute-Attribut, um anzugeben, welche Dateien ausgeführt werden können, obwohl es sich sowohl um ein Skript als auch um Code handeln kann.
Wie bereits von anderen erwähnt, sollten Binärdateien, die Zahlen enthalten, von einem Hex-Dump-Programm oder Hex-Editor und nicht von einem Text-Viewer angezeigt werden.
Es gibt ein Beispiel für den Inhalt des Programms ping.exe
Diese Datei ist tatsächlich ein verschiebbares Programm, und nicht alle Daten in dieser Datei repräsentieren Maschinencode. Es gibt Informationen über das Programm, z. B. welche dynamischen Bibliotheken es benötigt, welche Routinen verknüpft werden müssen, Anforderungen an Stapel und Programm- und Datenspeicher sowie den Einstiegspunkt des Programms. Adressoperanden in der Datei können relative Werte sein, die zu absoluten Werten berechnet werden müssen, oder Referenzen, die aufgelöst werden müssen.
Die "Programmdatei", an die Sie wahrscheinlich denken, wird als Binärbilddatei oder Speicherauszug des Programmspeichers bezeichnet. Eine solche Datei würde nur Maschinencode und Daten enthalten, wobei alle Adressreferenzen ordnungsgemäß für die Ausführung festgelegt sind.
selbst wenn sie Assembly-Code kennen (die niedrigste Ebene der Maschinensprache).
Assemblersprache ist nicht dasselbe wie Maschinensprache . Die typische CPU (um Hochsprachencomputer auszuschließen) akzeptiert Maschinencode als Eingabe, eine Anweisung nach der anderen. Die Operanden sind entweder Register oder numerische Speicheradressen. Assemblersprache ist eine übergeordnete Sprache, die symbolische Bezeichnungen für Anweisungspositionen und Variablen verwenden und numerische Op-Codes durch Mnemonik ersetzen kann. Ein Assembler-Programm muss in Maschinensprache / Code konvertiert werden, bevor es tatsächlich ausgeführt werden kann (normalerweise von Dienstprogrammen namens Assembler, Linker und Loader).
Die umgekehrte Operation, Disassemby, kann für Programmdateien mit einigem Erfolg und Verlust symbolischer Informationen ausgeführt werden. Die Demontage eines Speicherauszugs oder einer Programmabbilddatei ist eher ein Versuch und Irrtum, da Code- und Datenpositionen manuell identifiziert werden müssen.
Übrigens gibt es Personen, die den (numerischen) Maschinencode lesen und codieren können. Natürlich ist dies auf einer 8-Bit-CPU oder einem Mikrocontroller viel einfacher als auf einem 32-Bit-CISC-Prozessor mit einem Dutzend Speicheradressenmodi.