Was ist “Objekt” in “Objektdatei” und warum heißt es so? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
stlm58

Mir wurde eine Frage gestellt: “Was ist eine ‘Objektdatei’?”.

Nach dem Anschauen Wikiich weiß nur, dass es enthält Objekte.

Aber was sind diese Objekte und warum hat sie jemand so genannt?

  • Es ist sicherlich eine sehr alte Terminologie, wenn man bedenkt, dass Unix-Compiler produziert haben .o Dateien seit mindestens den frühen 1970er Jahren, und es hat nichts mit OO-Programmierung zu tun.

    – Fred Foo

    23. November 2011 um 22:37 Uhr


  • “Objekt: eine Person oder Sache, auf die eine bestimmte Handlung oder ein bestimmtes Gefühl gerichtet ist.” Das Produzieren dieser Datei ist das Ziel des Ausführens des Compilers, und sie mussten sich einen Namen dafür einfallen lassen, also …

    – jthill

    27. Mai 2014 um 14:29 Uhr

Benutzer-Avatar
Macmade

Objektdateien (oder Objektcode) sind Maschinencodedateien, die von einem Compiler aus dem Quellcode generiert werden.

Der Unterschied zu einer ausführbaren Datei besteht darin, dass die Objektdatei nicht verknüpft ist, sodass Verweise auf Funktionen, Symbole usw. noch nicht definiert sind (ihre Speicheradressen bleiben im Grunde leer).

Wenn Sie eine C-Datei mit GCC kompilieren:

gcc -Wall -o test test.c

Hier kompilieren Sie UND verlinken. Sie erhalten also eine ausführbare Datei, die alle Speicheradressenreferenzen für die enthaltenen Symbole enthält (Bibliotheken, Header usw.).

Aber wenn Sie dies tun:

gcc -Wall -o test.o -c test.c

Sie erstellen eine Objektdatei. Es ist auch Maschinencode, aber es muss gelinkt werden, um eine ausführbare Datei oder eine Bibliothek zu erzeugen.

Wenn Sie beispielsweise ein Projekt mit vielen C-Dateien haben, kompilieren Sie jede einzelne in Objektcode und verknüpfen dann alle Objektdateien miteinander, um das Endprodukt zu erzeugen.

Zum Beispiel:

gcc -Wall -o foo.o -c foo.c              // Object file for foo.c
gcc -Wall -o bar.o -c bar.c              // Object file for bar.c
gcc -Wall -o main.o -c main.c            // Object file for main.c
gcc -Wall -o software foo.o bar.o main.o // Executable (foo + bar + main)

Der Begriff Objekt steht hier für Folgen von unverkettetem Maschinencode (im Grunde). Eine Objektdatei enthält Objekte.

Sie haben gefragt: Warum ist dieser Aufruf so? Ich kann nicht wirklich antworten. Warum heißt “blau” “blau”? ; )

Es ist nur der Begriff, der seit … nun, Jahrzehnten verwendet wird …

Zur Information, die GCC Internals-Dokumentation definiert Objektcode nur als:

Der „Quellcode“ für ein Werk bezeichnet die bevorzugte Form des Werks, um Änderungen daran vorzunehmen. „Objektcode“ bezeichnet jede Nicht-Quellenform eines Werks.

Ziemlich vage über den historischen Grund …

Ich hoffe einfach, dass Sie jetzt besser verstehen, was eine Objektdatei ist. Ich denke, es ist wichtiger als zu wissen, warum es so heißt, denn Wörter sind nur, nun ja, Wörter …

  • Sie sollten wirklich versuchen, das “Warum heißt das so” zu beantworten, um Ihren gesamten Beitrag hervorragend zu machen: D.

    – Bis

    23. November 2011 um 23:00 Uhr

Ich glaube, der Name hat etwas mit der Unterscheidung zu tun zwischen:

  • Code für Menschen — Quellcode
  • Code für Maschinen — Objektcode

Objektdateien enthalten:

  • Header-Informationen: allgemeine Informationen über die Datei, wie z. B. die Größe des Codes, der Name der Quelldatei, aus der sie übersetzt wurde, und das Erstellungsdatum.
  • Objektcode: Binäre Anweisungen und Daten, die von einem Compiler oder Assembler generiert werden.
  • Verschiebung: Eine Liste der Stellen im Objektcode, die korrigiert werden müssen, wenn der Linker die Adressen des Objektcodes ändert.
  • Symbole: In diesem Modul definierte globale Symbole, aus anderen Modulen zu importierende oder vom Linker definierte Symbole.
  • Debugging-Informationen: Andere Informationen über den Objektcode, die nicht zum Linken benötigt werden, aber für einen Debugger nützlich sind. Dazu gehören Quelldatei- und Zeilennummerninformationen, lokale Symbole, Beschreibungen von Datenstrukturen, die vom Objektcode verwendet werden, wie beispielsweise C-Strukturdefinitionen.

Quelle: hier

Eine Objektdatei ist eine binäre Darstellung einer Quelldatei (Textdatei). Es ist eine Sammlung verschiedener Abschnitte, die die Art der Daten trennen in:

  • Textabschnitt
  • Datenbereich
  • Stapel
  • Haufen

Je nach Compiler/Umgebung können diese abweichen.

ZB auf *nix-Systemen:

objdump -d a.out <--- sofern wir a.cpp kompiliert haben

disassembly of section .init:

08048278 <_init>:
 8048278:       55                      push   %ebp
 8048279:       89 e5                   mov    %esp,%ebp
 804827b:       83 ec 08                sub    $0x8,%esp
 804827e:       e8 61 00 00 00          call   80482e4 <call_gmon_start>
 8048283:       e8 b3 00 00 00          call   804833b <frame_dummy>
 8048288:       e8 9f 01 00 00          call   804842c <__do_global_ctors_aux>
 804828d:       c9                      leave
 804828e:       c3                      ret
Disassembly of section .plt:

08048290 <puts@plt-0x10>:
 8048290:       ff 35 78 95 04 08       pushl  0x8049578
 8048296:       ff 25 7c 95 04 08       jmp    *0x804957c
 804829c:       00 00                   add    %al,(%eax)
        ...

080482a0 <puts@plt>:
 80482a0:       ff 25 80 95 04 08       jmp    *0x8049580
 80482a6:       68 00 00 00 00          push   $0x0
 80482ab:       e9 e0 ff ff ff          jmp    8048290 <_init+0x18>

080482b0 <__libc_start_main@plt>:
 80482b0:       ff 25 84 95 04 08       jmp    *0x8049584
 80482b6:       68 08 00 00 00          push   $0x8
 80482bb:       e9 d0 ff ff ff          jmp    8048290 <_init+0x18>
Disassembly of section .text:

Die verschiedenen Aufrufbefehle hier werden dann den verschiedenen Bibliotheken zum Aufrufen der eigentlichen Funktionen zugeteilt.

Benutzer-Avatar
Muhende Ente

Gemäß der von Ihnen verlinkten Seite enthält jede Sequenz oder jedes Objekt normalerweise Anweisungen für den Hostcomputer, um eine Aufgabe auszuführen, möglicherweise begleitet von zugehörigen Daten und Metadaten (z ).

Grundsätzlich ist jedes Objekt in der Objektdatei eine Funktion und die relevanten Informationen für den Linker, um sie in das vollständige Programm aufzunehmen.

1371210cookie-checkWas ist “Objekt” in “Objektdatei” und warum heißt es so? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy