Linker, loader en uitvoerbare formaten

Wat is de juiste verwerking die de opstartcode direct na het inschakelen uitvoert voordat main wordt aangeroepen op een microcontroller zonder OS?

  1. AAlle machinecode van .text vanuit het RAM terugschrijven naar flash
  2. BDe inhoud van het RAM uitlezen en de waarden van variabelen bij de vorige uitschakeling herstellen
  3. CDe beginwaarden van .data van flash naar RAM kopiëren en het .bss-gebied met 0 vullen
Antwoord en toelichting tonen

Antwoord: C. De beginwaarden van .data van flash naar RAM kopiëren en het .bss-gebied met 0 vullen

Bij uitschakelen gaat de inhoud van het RAM verloren, dus worden de waarden van variabelen met een beginwaarde opgeslagen in het niet-herschrijfbare flash en kopieert de opstartcode ze naar de plaats van de variabelen in het RAM. Het gebied van variabelen zonder beginwaarde (.bss) wordt met 0 gevuld. In het linkerscript worden voor .data apart het adres waar het in flash staat en het adres dat tijdens uitvoering in RAM wordt gebruikt opgegeven. Pas daarna kan main beginnen in de toestand die de regels van C beloven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Wat is het juiste verschil tussen „sectie” en „segment” in een ELF-bestand?
  2. Welke aanval is gemakkelijker te voorkomen door te verbieden dat een geheugenpagina tegelijk „beschrijfbaar” en „uitvoerbaar” is (W^X, scheiding van schrijven en uitvoeren)?
  3. Wanneer wordt bij gedeelde bibliotheken op Linux het versienummer van de soname, zoals de „.1” in libfoo.so.1, in het algemeen verhoogd?
  4. Wat is er te weten te komen als op Linux het commando ldd op een uitvoerbaar bestand wordt gebruikt?
  5. Welke combinatie van uitvoerbare bestandsformaten die op de belangrijkste OS'en worden gebruikt, is juist?

Vergelijkingen bij dit onderwerp