Linker, loader en uitvoerbare formaten
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?
- AHet is een compilerfout en kan alleen worden ingevuld als de broncode wordt gecorrigeerd
- BOp het moment dat de CPU de instructie uitvoert, wordt het sprongdoel geraden en bepaald
- CBij het linken (bij dynamisch linken deels tijdens uitvoering) op basis van de relocatie-informatie
Antwoord en toelichting tonen
Antwoord: C. Bij het linken (bij dynamisch linken deels tijdens uitvoering) op basis van de relocatie-informatie
Op het moment van compileren is het adres van printf onbekend, dus zet de compiler het sprongdoel op een voorlopige waarde en laat relocatie-informatie achter dat „in dit veld van deze instructie het adres van printf moet komen”. De linker ziet dat en schrijft de juiste waarde. Bij dynamisch linken wordt het omgeschreven naar een verwijzing naar de PLT-ingang, en het werkelijke adres van de bibliotheekfunctie wordt tijdens uitvoering door de dynamische linker in de GOT gezet.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten