Linker, Loader und ausführbare Formate

Welche Aussage trifft beim dynamischen Linken zu, wenn mit der PLT (Procedure Linkage Table) späte Bindung (Lazy Binding) verwendet wird?

  1. ADie Adresse einer Funktion der Shared Library wird beim ersten Aufruf aufgelöst, und ab dem zweiten Aufruf wird direkt zur aufgelösten Adresse gesprungen
  2. BVor dem Start des Programms werden stets die Adressen aller Funktionen aufgelöst
  3. CBei jedem Funktionsaufruf wird die Bibliotheksdatei erneut von der Festplatte gelesen
Antwort und Erläuterung anzeigen

Antwort: A. Die Adresse einer Funktion der Shared Library wird beim ersten Aufruf aufgelöst, und ab dem zweiten Aufruf wird direkt zur aufgelösten Adresse gesprungen

Das Programm ruft externe Funktionen über kleine Einsprungstellen der PLT auf. Bei später Bindung springt die Einsprungstelle beim ersten Aufruf in die Auflösungsroutine des dynamischen Linkers, der die echte Adresse sucht und in die GOT schreibt. Ab dem zweiten Aufruf wird unmittelbar zur Adresse in der GOT gesprungen. Da die Auflösung ungenutzter Funktionen entfällt, startet das Programm schneller. Aus Sicherheitsgründen ist jedoch auch die Einstellung weit verbreitet, beim Start alles aufzulösen und die GOT schreibgeschützt zu machen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welche Aufgabe hat der dynamische Linker (z. B. ld.so), der beim Start eines dynamisch gelinkten Programms unter Linux tätig wird?
  2. Welche Aussage zum Zweck von ASLR (Address Space Layout Randomization) ist richtig?
  3. Was ist der Hauptgrund dafür, eine ausführbare Datei als PIE (Position Independent Executable) zu erzeugen?
  4. Was tut der Loader des Betriebssystems beim Start eines Programms (z. B. unter Linux mit execve)?
  5. Welche Aussage zur Adresse, an der das Betriebssystem bei einem C-Programm die Ausführung zuerst beginnt (Entry Point), ist richtig?

Vergleiche zu diesem Thema