Linker, Loader und ausführbare Formate

Welche Aussage zur vom Linker durchgeführten Relokation ist richtig?

  1. ANachdem die endgültigen Adressen von Code und Daten feststehen, werden die Adressen in Befehlen und Daten durch korrekte Werte ersetzt
  2. BEin laufendes Programm wird auf einen anderen Computer verschoben und dort weiter ausgeführt
  3. CBei Speichermangel werden Seiten in den Massenspeicher ausgelagert
Antwort und Erläuterung anzeigen

Antwort: A. Nachdem die endgültigen Adressen von Code und Daten feststehen, werden die Adressen in Befehlen und Daten durch korrekte Werte ersetzt

Der Compiler erzeugt jede Datei, als begänne sie bei Adresse 0, und vermerkt als Relokationsinformationen die Stellen, an denen Adressen von Funktionen anderer Dateien oder eigener Variablen verwendet werden. Nachdem der Linker alle Dateien angeordnet und die tatsächlichen Adressen festgelegt hat, berechnet er für jede vermerkte Stelle die korrekte Adresse (oder den Abstand zum PC) und schreibt sie in den Befehl. Beim dynamischen Linken übernimmt der dynamische Linker zur Laufzeit einen Teil ähnlicher Ersetzungen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Beim Linken eines C-Programms trat der Fehler „undefined reference to `foo'“ (undefinierte Referenz auf foo) auf. Was ist die wahrscheinlichste Ursache?
  2. In a.c und b.c wurde jeweils eine globale Funktion gleichen Namens void init(void) ohne static definiert und gelinkt. Was geschieht?
  3. Welche Wirkung hat es, in C eine Funktion mit static zu definieren (z. B. static int helper(void))?
  4. Was bedeutet die Angabe „extern int count;“ in C?
  5. Welche Aussage zum unter Linux u. a. üblichen ELF-Format ist richtig?

Vergleiche zu diesem Thema