Ausführbar

A Hex -Dump einer ausführbaren Datei Realer Modus Lader

Im Computer, ausführbarer Code, ein ausführbare Datei, oder an ausführbares Programm, manchmal einfach als als als bezeichnet ausführbar oder binär, verursacht einen Computer ", um angegebene Aufgaben gemäß Coded auszuführen Anweisungen",",[1] im Gegensatz zu a Datendatei das muss interpretiert werden (analysiert) durch ein Programm, um sinnvoll zu sein.

Die genaue Interpretation hängt von der Verwendung ab. "Anweisungen" wird traditionell als bedeutet Maschinensprache Anweisungen für eine physische Zentralprozessor.[2] In einigen Kontexten eine Datei mit Skriptanweisungen (wie z. Bytecode) kann auch als ausführbar angesehen werden.

Generierung von ausführbaren Dateien

Ausführbare Dateien können in Maschinensprache handgegeben werden, obwohl es weitaus bequemer ist, Software als zu entwickeln Quellcode in einem hochrangige Sprache Das kann von Menschen leicht verstanden werden. In einigen Fällen kann Quellcode in angegeben werden in Montagesprache Stattdessen bleibt das menschlich lesbar, während sie eng mit Anweisungen für Maschinencode verbunden sind.

Die hochrangige Sprache ist zusammengestellt entweder in eine ausführbare Maschinencode-Datei oder in einen nicht executable Maschinencode-- Objektdatei irgendeiner Art; Der äquivalente Prozess auf dem Quellcode für Montagesprachensprachen wird aufgerufen Montage. Mehrere Objektdateien sind verknüpft So erstellen Sie die ausführbare Datei. Objektdateien - ausführbare oder nicht - werden normalerweise in a gespeichert Containerformat, wie zum Beispiel Ausführbares und verknüpfbares Format (Elf) oder Tragbare ausführbare Datei (Pe) was ist Betriebssystem-Spezifisch.[3] Dies gibt den generierten Maschinencode Struktur, beispielsweise in Abschnitte wie z. .Text (ausführbarer Code), .Daten (initialisierte globale und statische Variablen) und .Rodata (schreibgeschützte Daten wie Konstanten und Zeichenfolgen).

Ausführbare Dateien enthalten normalerweise auch a Laufzeitsystem, was implementiert Laufzeitsprachfunktionen (wie z. Aufgabenplanung, Ausnahmebehandlung, rufen statische Konstrukteure und Zerstörer usw.) und Interaktionen mit dem Betriebssystem, insbesondere über Argumente, Umgebung und Rückgabe eines ein Status beendenzusammen mit anderen Start- und Abschaltfunktionen wie der Veröffentlichung von Ressourcen wie Dateigriffe. Für C wird dies durch Verknüpfung in der durchgeführt CRT0 Objekt, das den tatsächlichen Einstiegspunkt enthält und ein Setup und Herunterfahren durch Aufrufen der Laufzeitbibliothek.[4]

Ausführbare Dateien enthalten somit normalerweise einen signifikanten zusätzlichen Maschinencode, der über den direkten Quellcode hinausgeht. In einigen Fällen ist es wünschenswert, dies zu weglassen, beispielsweise für die Entwicklung eingebetteter Systeme oder einfach zu verstehen, wie Kompilierung, Verknüpfung und Lade funktioniert. In C kann dies erfolgen, indem die übliche Laufzeit weggelassen und stattdessen explizit ein Linker -Skript angegeben wird, das den Einstiegspunkt generiert und das Start und das Abschalten verarbeitet, z. B. das Aufrufen hauptsächlich Starten und Rückgabe des Ausstiegsstatus an den Kernel am Ende.[5]

Ausführung

Um vom System auszuführen (z. B. ein Betriebssystem, Firmware, oder Bootlader) Eine ausführbare Datei muss den Systemen des Systems entsprechen Anwendung Binärschnittstelle (ABI).[6] In einfachen Schnittstellen wird eine Datei ausgeführt, indem sie in den Speicher geladen und zum Start des Adressraums springt und von dort aus ausgeführt wird. In komplizierteren Schnittstellen haben ausführbare Dateien zusätzliche Metadaten, die eine separate angeben Einstiegspunkt. Zum Beispiel in ELF ist der Einstiegspunkt im Header des Headers angegeben e_entry Feld, das die (virtuelle) Speicheradresse angibt, an der die Ausführung gestartet werden kann. Im GCC (GNU Compiler -Sammlung) Dieses Feld wird vom Linker basierend auf dem festgelegt _Anfang Symbol.

Siehe auch

Verweise

  1. ^ "ausführbar". Merriam-Websters Online-Wörterbuch. Merriam-Webster. Abgerufen 2008-07-19.
  2. ^ "Maschinenanweisungen". Geeksforgeeks. 2015-11-03. Abgerufen 2019-09-18.
  3. ^ "Kapitel 4: Objektdateien". refSpecs.linuxbase.org. Abgerufen 2019-09-18.
  4. ^ Fisher, Tim. "Liste der ausführbaren Dateierweiterungen". Lifewire.com. Abgerufen 2019-09-18.
  5. ^ McKellar, Jessica (2010-03-16). "Hallo aus einer libc-freien Welt! (Teil 1)".
  6. ^ Boelen, Michael (2019-05-15). "Die 101 der Elf -Dateien unter Linux: Verständnis und Analyse - Linux ..." Linux -Audit. Abgerufen 2019-09-18.

Externe Links