Objektdatei
Ein Objektdatei ist eine Computerdatei, die enthält Objektcode, das ist, Maschinensprache Ausgabe von an Assembler oder Compiler. Der Objektcode ist normalerweise Umlebbarund normalerweise nicht direkt ausführbar. Es gibt verschiedene Formate für Objektdateien, und der gleiche Maschinencode kann in verschiedenen Objektdateiformaten verpackt werden. Ein Objektdatei kann auch wie a funktionieren gemeinsame Bibliothek.
Zusätzlich zum Objektcode selbst können Objektdateien enthalten Metadaten Wird zum Verknüpfen oder Debuggen verwendet, einschließlich: Informationen zur Behebung symbolischer Querverweise zwischen verschiedenen Modulen, Verlegung Information, Stapel entspannt Information, Kommentare, Programm Symbole, Debugging oder Profilerstellung Information. Andere Metadaten können das Datum und die Uhrzeit der Zusammenstellung, den Compiler -Namen und -version sowie andere identifizierende Informationen enthalten.
Der Begriff "Objektprogramm" stammt aus mindestens den 1950er Jahren:
Ein Begriff in der automatischen Programmierung für das von der Maschine erstellte Maschinensprachenprogramm durch Übersetzung eines vom Programmierers in einer Sprache, das der algebraischen Notation, geschriebenen Quellprogramm übersetzt.[1]
Ein Computerprogrammierer generiert Objektcode mit a Compiler oder Assembler. Zum Beispiel unter Linux, das GNU Compiler -Sammlung Der Compiler generiert Dateien mit einer .o -Erweiterung, die das verwenden ELF Format. Zusammenstellung auf Fenster generiert Dateien mit einer .obj -Erweiterung, die die verwenden Sarg Format. Anschließend wird ein Linker verwendet, um den Objektcode in einem ausführbaren Programm oder einer Bibliothek zu kombinieren, die bei Bedarf vorkompilierte Systembibliotheken in Vorkompilierungen zieht.
Objektdateiformate
Es gibt viele verschiedene Objektdateiformate; Ursprünglich hatte jeder Computertyp ein eigenes einzigartiges Format, aber mit dem Aufkommen von Unix und andere tragbar Betriebssysteme, einige Formate, wie z. ELF und Sarg, wurden auf verschiedenen Systemen definiert und verwendet. Es ist möglich, dass dasselbe Format beides als verwendet wird Linker Eingang und Ausgabe und damit als die Bibliothek und ausführbar Datei Format.[2]: S.16 Einige Formate können Maschinencode für verschiedene Prozessoren enthalten, wobei die richtigen vom Betriebssystem beim Laden des Programms ausgewählt werden.[3]
Einige Systeme unterscheiden zwischen Formaten, die direkt ausführbar sind, und Formate, die die Verarbeitung durch den Linker erfordern. Zum Beispiel, OS/360 und Nachfolger Rufen Sie das erste Format a an Lastmodul und der zweite und Objektmodul. In diesem Fall haben die Dateien völlig unterschiedliche Formate.
Das Design und/oder die Auswahl eines Objektdateiformats sind ein wesentlicher Bestandteil des Gesamtsystemdesigns. Es beeinflusst die Leistung des Linkers und somit Programmierer Turnaround während eines Programms entwickelt. Wenn das Format für ausführbare Säle verwendet wird, wirkt sich das Design auch auf die Zeitprogramme aus Beginnen Sie mit dem Laufenund so die Empfänglichkeit Für Benutzer.
Absolute Dateien
Viele frühe Computer oder klein MikrocomputerUnterstützen Sie nur ein absolutes Objektformat. Programme sind nicht verlagbar; Sie müssen zusammengestellt oder zusammengestellt werden, um an bestimmten, vordefinierten Adressen auszuführen. Die Datei enthält keine Umzugs- oder Verknüpfungsinformationen. Diese Dateien können in Lese-/Schreibspeicher geladen oder gespeichert werden Nur-Lese-Speicher. Zum Beispiel die Motorola 6800 Mikbug Monitor enthält eine Routine zum Lesen einer absoluten Objektdatei (SREC -Format) aus Papier Klebeband.[4] DOS Com Dateien sind ein neueres Beispiel für absolute Objektdateien.[5]
Segmentierung
Die meisten Objektdateiformate sind als separate Datenabschnitte strukturiert, wobei jeder Abschnitt einen bestimmten Datenart enthält. Diese Abschnitte werden aufgrund des Begriffs als "Segmente" bezeichnet "Speichersegment", was zuvor eine gemeinsame Form von war Speicherverwaltung. Wenn ein Programm von a in den Speicher geladen wird LaderDer Lader verteilt dem Programm verschiedene Speicherregionen. Einige dieser Regionen entsprechen Abschnitten der Objektdatei und sind daher normalerweise unter den gleichen Namen bekannt. Andere, wie der Stack, existieren nur zur Laufzeit. In manchen Fällen, Verlegung wird vom Loader (oder Linker) durchgeführt, um die tatsächlichen Speicheradressen anzugeben. Für viele Programme oder Architekturen ist jedoch nicht erforderlich, da die von der behandelt werden Speicherverwaltungseinheit oder von Positionsunabhängiger Code. In einigen Systemen können die Segmente der Objektdatei dann in den Speicher kopiert (ausgestellt) und ausgeführt werden, ohne eine weitere Verarbeitung zu benötigen. Auf diesen Systemen kann dies möglich sein träge, dh nur, wenn die Segmente während der Ausführung beispielsweise über a referenziert werden Speicher-abgebildete Datei unterstützt durch die Objektdatei.
Arten von Daten, die von typischen Objektdateiformaten unterstützt werden:[6]
- Header (Beschreibende und Steuerungsinformationen)
- Codesegment ("Textsegment", ausführbarer Code)
- Datensegment (initialisiert Statische Variablen)
- Schreibgeschützte Datensegment (Rodata, statisch initialisiert Konstanten)
- BSS -Segment (nicht initialisierte statische Daten, sowohl Variablen als auch Konstanten)
- Externe Definitionen und Referenzen für die Verknüpfung
- Verlegung Information
- Dynamische Verknüpfung Information
- Debuggen Information
Segmente in verschiedenen Objektdateien können vom Linker gemäß den angegebenen Regeln kombiniert werden, wenn die Segmente definiert sind. Konventionen bestehen für Segmente, die zwischen Objektdateien geteilt werden. zum Beispiel in DOS es gibt Verschiedene Speichermodelle Dadurch werden die Namen spezieller Segmente festgelegt und ob sie kombiniert werden oder nicht.[7]
Die Debugging -Informationen können entweder ein integraler Bestandteil des Objektdateiformats sein, wie in Sarg, oder ein Semi-unabhängiges Format die mit mehreren Objektformaten verwendet werden können, wie z. Stiche oder ZWERG.
Das GNU -Projekt's Binärdateideskriptorbibliothek (BFD -Bibliothek) bietet gemeinsam API Für die Manipulation von Objektdateien in verschiedenen Formaten.
Verweise
- ^ WRUBEL, Marschall H. (1959). Ein Primer für die Programmierung für digitale Computer. New York: McGraw-Hill. p. 222. Abgerufen 31. Juli, 2020.
- ^ IBM Corporation (1973). IBM OS Linkage Editor und Loader (PDF). Abgerufen 2012-08-06.
- ^ "Fatelf: Universal -Binärdateien für Linux". Abgerufen 2. August, 2020.
- ^ Wiles, Mike; Felix, Andre. MCM6830L7 Mikbug/Minibug ROM (PDF). Motorola Semiconductor Products, Inc.. Abgerufen 31. Juli, 2020.
- ^ Godse, D.A.; Godse, A.P. (2008). Mikroprozessor - i (First Ed.). Pune: Technische Veröffentlichungen. S. 3–15. ISBN 978-81-8431-355-0.
- ^ Mauerer, Wolfgang (2010). Professionelle Linux -Kernel -Architektur.John Wiley & Sons.p.Anhang E: Das Elf -Binärformat. ISBN 978-0-470-34343-2. Abgerufen 1. August,, 2020.
- ^ Irvine, Kip R. (1993), Montagesprache für den IBM-PC (2. Aufl.), New York: Macmillan, ISBN 0-02-359651-1
Weitere Lektüre
- Levine, John R. (2000). Linker & Lader.Morgan Kaufmann Publishers.p.256. ISBN 1-55860-496-0.