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?
- AEs ist ein Compilerfehler, der sich nur durch Korrektur des Quellcodes beheben lässt
- BDie CPU schätzt das Sprungziel in dem Moment, in dem sie den Befehl ausführt
- 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.