Wat is Dynamisch linken?

Methode waarbij gedeelde bibliotheken tijdens runtime worden geladen en gekoppeld. Bibliotheken kunnen tussen processen worden gedeeld en correcties werken door bij vervanging, maar er is een bibliotheek nodig die bij de uitvoeringsomgeving past.

Japanse benaming: 動的リンク

“Dynamisch linken” komt voor in 8 oefenvragen uit 1 onderwerpen, bijv. Linker, loader en uitvoerbare formaten.

Vakgebied: Linker, loader en uitvoerbare formaten

Nu oefenen: vragen over Dynamisch linken

Welk voordeel van dynamisch linken (gedeelde bibliotheken) is juist?

  1. AHet werkt altijd, ook als de bibliotheek in de uitvoeromgeving ontbreekt
  2. BMeerdere programma's kunnen één bibliotheek in het geheugen delen, en bij een update van de bibliotheek wordt de correctie zonder opnieuw bouwen verwerkt
  3. COpstartverwerking is helemaal niet meer nodig en het start altijd sneller dan statisch linken
Antwoord en toelichting tonen

Antwoord: B. Meerdere programma's kunnen één bibliotheek in het geheugen delen, en bij een update van de bibliotheek wordt de correctie zonder opnieuw bouwen verwerkt

Bij dynamisch linken legt het uitvoerbare bestand alleen vast „welke functie van welke gedeelde bibliotheek wordt gebruikt”, en tijdens uitvoering laadt de dynamische linker de bibliotheek en koppelt die. Omdat de code van een gedeelde bibliotheek niet wordt herschreven, kan één kopie in het fysieke geheugen door veel processen worden gedeeld. Ook correcties van fouten en kwetsbaarheden vereisen alleen het vervangen van de bibliotheek. Het koppelen kost bij het opstarten echter moeite.

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.

“Dynamisch linken” in de toelichting

Vragen met “Dynamisch linken” (8)

  1. Welk voordeel van dynamisch linken (gedeelde bibliotheken) is juist?
  2. Welke omschrijving is juist van lazy binding met de PLT (procedure linkage table) bij dynamisch linken?
  3. Welke omschrijving van de relocatie die de linker uitvoert, is juist?
  4. Wat doet de loader van het OS bij het starten van een programma (zoals execve op Linux)?
  5. Wat gebeurt er als het commando strip op een uitvoerbaar bestand wordt gebruikt?
  6. Waarvoor wordt de Linux-functie dlopen (overeenkomend met LoadLibrary op Windows) het meest passend gebruikt?
  7. Bij het disassembleren van een objectbestand bleek het sprongdoel van de instructie die de externe functie printf aanroept een voorlopige waarde zoals 0 te zijn. Wanneer wordt deze waarde juist ingevuld?
  8. Welke combinatie van uitvoerbare bestandsformaten die op de belangrijkste OS'en worden gebruikt, is juist?

Vergelijkingen met deze term

Verwante termen

Dynamische linker Relocatie (relocation) PLT (procedure linkage table) Via GOT (global offset table) Linker Gedeelde bibliotheek (shared library) Loader Symbooltabel Objectbestand

Naar de woordenlijst