Linker, loader en uitvoerbare formaten

Leer met meerkeuzevragen over objectbestanden en het ELF-formaat, symboolresolutie en relocatie, statisch en dynamisch linken en de geheugenindeling van een proces.

Oefen 10 vragenWillekeurige vragen uit dit onderwerp · ongeveer 5 minuten Dit onderwerp oefenenAlle vragen over dit onderwerp in willekeurige volgorde Zwakke vragenAlleen de laatst fout beantwoorde vragen opnieuw oefenen

Linker, loader en uitvoerbare formaten: kernpunten

Wat een compiler uitvoert, zijn objectbestanden, die als zodanig niet kunnen worden uitgevoerd. De linker verzamelt meerdere objectbestanden en bibliotheken, koppelt de namen van functies en variabelen (symbolen) aan echte adressen (symboolresolutie), schrijft die adressen in de instructies (relocatie) en maakt zo een uitvoerbaar bestand.

De loader laadt het uitvoerbare bestand in het geheugen, richt de gebieden voor tekst, data, BSS, heap en stack in en start het programma. Dynamisch linken, waarbij bibliotheken tijdens de uitvoering worden gekoppeld, en positieonafhankelijke code (PIC), die op elk adres kan draaien, zijn nuttig voor zowel geheugenbesparing als beveiliging.

Alle vragen over Linker, loader en uitvoerbare formaten (50)

  1. Welke uitspraak over het objectbestand (.o) dat de compiler uit één bronbestand voortbrengt, is juist?
  2. Wat is de juiste hoofdtaak van de linker?
  3. Welke omschrijving van de symboolresolutie die de linker uitvoert, is juist?
  4. Welke omschrijving van de relocatie die de linker uitvoert, is juist?
  5. Bij het linken van een C-programma verschijnt de fout „undefined reference to `foo'”. Wat is de meest waarschijnlijke oorzaak?
  6. In zowel a.c als b.c is een globale functie void init(void) met dezelfde naam gedefinieerd zonder static, en de bestanden worden gelinkt. Wat gebeurt er?
  7. Wat is het juiste effect als in C een functie met static wordt gedefinieerd (bijvoorbeeld static int helper(void))?
  8. Wat is de juiste betekenis van „extern int count;” in C?
  9. Welke uitspraak over het ELF-formaat, dat veel op Linux wordt gebruikt, is juist?
  10. Wat staat er in de .text-sectie van een uitvoerbaar bestand?
  11. In welke sectie wordt in het algemeen de globale variabele „int limit = 100;” geplaatst, buiten een functie in C geschreven?
  12. Welke eigenschap van de .bss-sectie is juist?
  13. Het uitvoeren van het C-fragment „char *p = "hello"; p[0] = 'H';” leidt in veel omgevingen tot abnormale beëindiging. Wat is de juiste reden?
  14. Welke combinatie van de bovenstaande globale variabelen staat in het algemeen in de .bss-sectie?
  15. Waar wordt tijdens uitvoering een in een C-functie gedeclareerde lokale variabele (automatische variabele) zonder static geplaatst?
  16. Uit welk gebied van het proces wordt het met malloc in C gereserveerde geheugen in het algemeen genomen?
  17. Welke volgorde van de geheugenindeling van een gangbaar proces op Linux en dergelijke, van laag naar hoog adres, is juist?
  18. Welk voordeel is juist van de indeling waarin heap en stack van een proces in tegengestelde richting groeien met ertussen een breed vrij gebied?
  19. Welke omschrijving van statisch linken is juist?
  20. Welk voordeel van dynamisch linken (gedeelde bibliotheken) is juist?
  21. Een dynamisch gelinkt programma werd naar een andere computer gekopieerd en uitgevoerd, maar startte niet. Wat is de meest waarschijnlijke oorzaak?
  22. Wat bouwt de linker in het uitvoerbare bestand in als er samen met een statische bibliotheek (.a-bestand) wordt gelinkt?
  23. Bij de GNU-linker kan een fout „undefined reference” optreden als een statische bibliotheek vóór het objectbestand dat haar gebruikt wordt geschreven, zoals in „gcc -lmylib main.o”. Wat is de juiste reden?
  24. Welke omschrijving van position-independent code (PIC) is juist?
  25. Wat is de juiste rol van de GOT (global offset table) die bij gedeelde bibliotheken wordt gebruikt?
  26. Welke omschrijving is juist van lazy binding met de PLT (procedure linkage table) bij dynamisch linken?
  27. Wat is de juiste rol van de dynamische linker (zoals ld.so) die werkt bij het starten van een dynamisch gelinkt programma op Linux?
  28. Wat is het juiste doel van ASLR (address space layout randomization)?
  29. Wat is de belangrijkste reden om een uitvoerbaar bestand als PIE (position-independent executable) te bouwen?
  30. Wat doet de loader van het OS bij het starten van een programma (zoals execve op Linux)?
  31. Welke uitspraak is juist over het adres waar het OS in een C-programma de uitvoering begint (entry point)?
  32. Wat gebeurt er in het algemeen met de waarde 3 als de C-functie main eindigt met „return 3;”?
  33. Wat gebeurt er als het commando strip op een uitvoerbaar bestand wordt gebruikt?
  34. Hoe worden zwakke symbolen (weak symbols) door de linker behandeld?
  35. Wat is het belangrijkste doel van name mangling in C++, waarbij de compiler symboolnamen maakt door informatie zoals argumenttypen aan de functienaam toe te voegen?
  36. Waarvoor wordt de Linux-functie dlopen (overeenkomend met LoadLibrary op Windows) het meest passend gebruikt?
  37. Hoe wordt het fysieke geheugen gebruikt als 100 processen dezelfde gedeelde bibliotheek gebruiken?
  38. 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?
  39. Wat is de juiste rol van het linkerscript dat bij embedded ontwikkeling wordt gebruikt?
  40. Wat is de juiste verwerking die de opstartcode direct na het inschakelen uitvoert voordat main wordt aangeroepen op een microcontroller zonder OS?
  41. Wat is het juiste verschil tussen „sectie” en „segment” in een ELF-bestand?
  42. Welke aanval is gemakkelijker te voorkomen door te verbieden dat een geheugenpagina tegelijk „beschrijfbaar” en „uitvoerbaar” is (W^X, scheiding van schrijven en uitvoeren)?
  43. Wanneer wordt bij gedeelde bibliotheken op Linux het versienummer van de soname, zoals de „.1” in libfoo.so.1, in het algemeen verhoogd?
  44. Wat is er te weten te komen als op Linux het commando ldd op een uitvoerbaar bestand wordt gebruikt?
  45. Welke combinatie van uitvoerbare bestandsformaten die op de belangrijkste OS'en worden gebruikt, is juist?
  46. Wat gebeurt er in het algemeen op Linux en dergelijke als recursie te diep wordt en de bovengrens van de stack wordt overschreden?
  47. Welke uitspraak is juist over de waarde bij het eerste gebruik van lokale en globale variabelen in C waarvoor geen beginwaarde is geschreven?
  48. Bij herhaald malloc en free kan het voorkomen dat, ook al is het totaal aan vrij geheugen ruim voldoende, een groot gebied niet meer in één keer kan worden gereserveerd. Hoe heet dit verschijnsel?
  49. Welk voordeel is juist van het zetten van de symboolzichtbaarheid (visibility) op „hidden” voor interne functies, terwijl bij het maken van een gedeelde bibliotheek alleen de van buiten gebruikte functies worden gepubliceerd?
  50. Welk mechanisme waardoor in C++ de constructors van globale objecten vóór main worden uitgevoerd, is juist?

Vergelijkingen bij dit onderwerp

Andere onderwerpen in Computersystemen