Linker, Loader und ausführbare Formate

Was ist der Unterschied zwischen „Section“ und „Segment“ in ELF-Dateien?

  1. ASection ist die Bezeichnung für Windows, Segment die für Linux; der Inhalt ist derselbe
  2. BDie Section ist die feine, vom Linker behandelte Einheit, das Segment ist die Einheit, die der Loader in den Speicher lädt und die Sections mit gleichen Rechten zusammenfasst
  3. CSegmente gibt es nur auf der Festplatte, und sie werden nicht in den Speicher geladen
Antwort und Erläuterung anzeigen

Antwort: B. Die Section ist die feine, vom Linker behandelte Einheit, das Segment ist die Einheit, die der Loader in den Speicher lädt und die Sections mit gleichen Rechten zusammenfasst

ELF kennt zwei Sichtweisen. Der Linker kombiniert und relokiert in Einheiten feiner Sections wie .text, .rodata, .data und .bss. Der Loader bildet in Einheiten der in den Program Headern angegebenen Segmente in den Speicher ab, etwa mit .text und .rodata in einem Lese- und Ausführungssegment sowie .data und .bss in einem Lese- und Schreibsegment. Die Zusammenfassung nach Rechten erleichtert die Einrichtung des Schutzes pro Seite.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. 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)?
  2. Wann wird bei Shared Libraries unter Linux die Versionsnummer des soname, wie das „.1“ in libfoo.so.1, im Allgemeinen erhöht?
  3. Was lässt sich unter Linux erkennen, wenn der Befehl ldd auf eine ausführbare Datei angewendet wird?
  4. Welche Kombination der von den wichtigsten Betriebssystemen verwendeten Formate ausführbarer Dateien ist richtig?
  5. Was geschieht unter Linux u. a. im Allgemeinen, wenn eine zu tiefe Rekursion die Obergrenze des Stacks überschreitet?

Vergleiche zu diesem Thema