Linker, loader en uitvoerbare formaten

Welke omschrijving is juist van lazy binding met de PLT (procedure linkage table) bij dynamisch linken?

  1. AHet adres van een functie in een gedeelde bibliotheek wordt opgelost wanneer de functie voor het eerst wordt aangeroepen en vanaf de tweede keer wordt rechtstreeks naar het opgeloste adres gesprongen
  2. BVóór het starten van het programma worden altijd de adressen van alle functies opgelost
  3. CBij elke functie-aanroep wordt het bibliotheekbestand opnieuw van schijf gelezen
Antwoord en toelichting tonen

Antwoord: A. Het adres van een functie in een gedeelde bibliotheek wordt opgelost wanneer de functie voor het eerst wordt aangeroepen en vanaf de tweede keer wordt rechtstreeks naar het opgeloste adres gesprongen

Het programma roept externe functies aan via een kleine ingang in de PLT. Bij lazy binding springt de ingang bij de eerste aanroep naar de oplosroutine van de dynamische linker, die het echte adres zoekt en in de GOT schrijft. Vanaf de tweede keer wordt rechtstreeks naar het adres in de GOT gesprongen. Doordat het oplossen van ongebruikte functies kan worden overgeslagen, start het sneller. Voor de veiligheid wordt echter ook veel de instelling gebruikt waarbij alles bij het opstarten wordt opgelost en de GOT alleen-lezen wordt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Wat is de juiste rol van de dynamische linker (zoals ld.so) die werkt bij het starten van een dynamisch gelinkt programma op Linux?
  2. Wat is het juiste doel van ASLR (address space layout randomization)?
  3. Wat is de belangrijkste reden om een uitvoerbaar bestand als PIE (position-independent executable) te bouwen?
  4. Wat doet de loader van het OS bij het starten van een programma (zoals execve op Linux)?
  5. Welke uitspraak is juist over het adres waar het OS in een C-programma de uitvoering begint (entry point)?

Vergelijkingen bij dit onderwerp