Linker, loader en uitvoerbare formaten
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?
- ADe tekenreeks stond op de stack en was verdwenen doordat de functie was teruggekeerd
- BEen stringliteral staat in de tegen schrijven beveiligde .rodata en er werd geprobeerd daarin te schrijven
- Cp was met 0 geïnitialiseerd
Antwoord en toelichting tonen
Antwoord: B. Een stringliteral staat in de tegen schrijven beveiligde .rodata en er werd geprobeerd daarin te schrijven
Stringliterals zoals "hello" en globale constanten met const komen in een alleen-lezen datagebied (.rodata). Omdat schrijven naar deze pagina is verboden, detecteert de CPU bij een schrijfpoging een beveiligingsschending en stopt het OS het programma (segmentation fault). Wil men herschrijven, dan kan met een array, „char s[] = "hello";”, een kopie in een beschrijfbaar gebied worden gemaakt.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten