Linker, Loader und ausführbare Formate

Beim Disassemblieren einer Objektdatei hatte das Sprungziel des Befehls, der die externe Funktion printf aufruft, einen vorläufigen Wert wie 0. Wann wird dieser Wert korrekt eingetragen?

  1. AEs ist ein Compilerfehler, der sich nur durch Korrektur des Quellcodes beheben lässt
  2. BDie CPU schätzt das Sprungziel in dem Moment, in dem sie den Befehl ausführt
  3. CBeim Linken (bei dynamischem Linken teilweise zur Laufzeit), auf Grundlage der Relokationsinformationen
Antwort und Erläuterung anzeigen

Antwort: C. Beim Linken (bei dynamischem Linken teilweise zur Laufzeit), auf Grundlage der Relokationsinformationen

Zur Kompilierzeit ist die Adresse von printf unbekannt; der Compiler setzt daher einen vorläufigen Wert als Sprungziel und hinterlässt Relokationsinformationen „in dieses Feld dieses Befehls ist die Adresse von printf einzutragen“. Der Linker trägt anhand dessen den richtigen Wert ein. Beim dynamischen Linken wird so ersetzt, dass auf die Einsprungstelle der PLT verwiesen wird, und die tatsächliche Adresse der Bibliotheksfunktion trägt der dynamische Linker zur Laufzeit in die GOT ein.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welche Aufgabe hat ein in der Embedded-Entwicklung verwendetes Linker-Skript?
  2. Welche Verarbeitung führt der Startcode bei einem Mikrocontroller ohne Betriebssystem unmittelbar nach dem Einschalten aus, bevor er main aufruft?
  3. Was ist der Unterschied zwischen „Section“ und „Segment“ in ELF-Dateien?
  4. Welcher Angriff lässt sich leichter verhindern, wenn Speicherseiten nicht gleichzeitig „beschreibbar“ und „ausführbar“ sein dürfen (W^X, Trennung von Schreiben und Ausführen)?
  5. Wann wird bei Shared Libraries unter Linux die Versionsnummer des soname, wie das „.1“ in libfoo.so.1, im Allgemeinen erhöht?

Vergleiche zu diesem Thema