Linker, loader en uitvoerbare formaten

Welke volgorde van de geheugenindeling van een gangbaar proces op Linux en dergelijke, van laag naar hoog adres, is juist?

  1. ATekst → data → BSS → heap → (vrij) → stack
  2. BStack → tekst → heap → data → BSS
  3. CHeap → stack → BSS → data → tekst
Antwoord en toelichting tonen

Antwoord: A. Tekst → data → BSS → heap → (vrij) → stack

In de typische indeling staan aan de lage adreszijde de machinecode (tekst), de data met beginwaarde en de BSS die met 0 begint, waarboven de heap naar hogere adressen groeit. De stack groeit van de hoge adreszijde naar lagere adressen, en in het brede vrije gebied daartussen liggen gedeelde bibliotheken en mmap-gebieden. De werkelijke adressen worden voor de veiligheid door ASLR bij elke uitvoering verschoven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Welk voordeel is juist van de indeling waarin heap en stack van een proces in tegengestelde richting groeien met ertussen een breed vrij gebied?
  2. Welke omschrijving van statisch linken is juist?
  3. Welk voordeel van dynamisch linken (gedeelde bibliotheken) is juist?
  4. Een dynamisch gelinkt programma werd naar een andere computer gekopieerd en uitgevoerd, maar startte niet. Wat is de meest waarschijnlijke oorzaak?
  5. Wat bouwt de linker in het uitvoerbare bestand in als er samen met een statische bibliotheek (.a-bestand) wordt gelinkt?

Vergelijkingen bij dit onderwerp