Linker, Loader und ausführbare Formate

Welche Reihenfolge ist die richtige Speicheraufteilung eines üblichen Prozesses unter Linux u. a., von kleinen zu großen Adressen geordnet?

  1. AText → Daten → BSS → Heap → (frei) → Stack
  2. BStack → Text → Heap → Daten → BSS
  3. CHeap → Stack → BSS → Daten → Text
Antwort und Erläuterung anzeigen

Antwort: A. Text → Daten → BSS → Heap → (frei) → Stack

In der typischen Anordnung folgen von der kleinen Adressseite her der Text mit dem Maschinencode, die Daten mit Initialwert und das mit 0 beginnende BSS; darüber wächst der Heap zu größeren Adressen. Der Stack wächst von der großen Adressseite zu kleineren Adressen, und im weiten freien Bereich zwischen beiden liegen Shared Libraries und mmap-Bereiche. Die tatsächlichen Adressen werden aus Sicherheitsgründen durch ASLR bei jeder Ausführung verschoben.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welcher Vorteil ergibt sich daraus, Heap und Stack eines Prozesses mit einem großen freien Bereich dazwischen in entgegengesetzte Richtungen wachsen zu lassen?
  2. Welche Aussage zum statischen Linken ist richtig?
  3. Welcher Vorteil des dynamischen Linkens (Shared Libraries) ist richtig?
  4. Ein dynamisch gelinktes Programm startete nicht, nachdem es auf einen anderen Computer kopiert und ausgeführt wurde. Was ist die wahrscheinlichste Ursache?
  5. Was bindet der Linker in die ausführbare Datei ein, wenn er mit einer statischen Bibliothek (.a-Datei) linkt?

Vergleiche zu diesem Thema