Verwenden Sie zuerst immer das richtige Werkzeug für den Job. Der Texteditor zum Anzeigen von Binärdateien ist derselbe wie ein Messer zum Nageln. Verwenden Sie einen HEX-Viewer / -Editor für solche Aufgaben oder verwenden Sie besser das Tool, das die Interna der betreffenden Binärdatei kennt. Wenn wir über die Opcodes der CPU sprechen, wäre etwas wie IDA Pro free oder OllyDbg hilfreich für die Analyse interner ausführbarer Dateien.
Bedeutet das, dass der Opcode
f8
in binäre Daten umgewandelt1111 1000
und in der Datei gespeichert wird?
Wie von @Mokubai richtig angedeutet wurde - 0xF8
ist dieselbe Zahl wie 1111 1000
eine, die in HEX-Notation und die letzte als binäre Darstellung dargestellt wird. Im Dezimalsystem stimmt die Nummer 248 überein.
Wenn Sie manuell ausführbaren Code aus CPU-Opcodes erstellen (oder den Assembler-Quellcode kompilieren), erkennt die i386-CPU die Anweisung 0xF8
( 0b11111000
oder 248 - alles gleich) CLC
.
Ein Assembly-Code, der von einem Compiler (etwa) generiert wird,
clc
hat einen Opcode,f8
und ich bin sicher, dass der Assembler, der die obige Mnemonic zusammensetzt, den Opcodef8
an seiner Stelle ersetzt.
Das ist wahr, außer - "Ein von einem Compiler generierter Assembly-Code". Ich möchte nur sicherstellen, dass Sie den Unterschied zwischen "Assemblycode" und Opcodes richtig verstehen. Opcodes sind eine genaue Sprache, die von der CPU verstanden werden kann, es sind nur Zahlen (und so haben wir die ersten Computer programmiert, als Übersetzer von CPU-Mnemonics aka Assembler ein Traum waren).
Heutzutage verwenden wir hauptsächlich "direkte" Kompilierung von der höheren Programmiersprache direkt zu ausführbaren Binärdateien mit Compilern wie C / C ++ / GoLang, die CPU-Opcodes erzeugen.
(Wenn ich "direkte Kompilierung" gesagt habe, ist das eigentlich nicht wahr. Unter den Hauben-Compilern müssen mehrere Schritte ausgeführt werden, bevor ausführbare Binärdateien erstellt wurden. Für den Endbenutzer sieht es jedoch genauso aus, als würden wir ein Auto fahren, ohne zu wissen, wie Benzin in Bewegung umgewandelt wird.)
Wie von @sawdust im Kommentar richtig erwähnt, können Programmiersprachen höherer Ebenen unterschiedliche Strategien zum Erstellen von CPU-Opcodes verwenden. Sie können zum Beispiel den gcc
Compiler analysieren, wie er Opcodes garen würde, indem Sie ihm sagen, dass er Assembler-Code generiert, der zum Erstellen von Opcodes (Objektcodes) verwendet wird.
gcc -S -o myprogram.asm myprogram.c
Wenn dies der Fall ist, warum kann ich dann den binären Inhalt einer Binärdatei nicht mit einem normalen Texteditor (z. B. Notepad) anzeigen - schließlich sind es '0' und '1'.
Der Editor spricht eine andere Sprache. Es versteht seine eigenen "Opcodes" - ASCII, alles andere ist "griechisch" für Notepad.