This is an old revision of the document!
Tasks
fdsa
Formatul ELF
Compilati programul adr_space.c. Folosiți utilitarul readelf pentru a afisa informații despre secțiunile executabilului adr_space. (Hint: man readelf, search: sections)
Identificați secțiunile .text, .rodata, .data și .bss. Observați diferențele în coloana Type între .bss și .data. Ce înseamnă ele?
Secțiunile unui executabil
Urmăriți declarațiile de variabile din fișierul adr_space.c. Determinați secțiunea în care a fost plasată fiecare variabilă. În acest scop folosiți objdump. (Hint: objdump -t)
Verificați că dimensiunea fiecărei variabile (a 5-a coloană din output-ul lui objdump) corespunde cu declarația corespunzătoare din fișierul adr_space.c.
De ce dimensiunea lui string2 este doar 4? Folosiți readelf pentru a afișa tot conținutul secțiunii .data (Hint: readelf -x). De ce lipsește conținutul variabilei string2.
Folosiți readelf pentru a căuta secțiunea în care este conținutul variabilei string2. Cum explicați?
Layout-ul procesului în memorie
Rulați executabilul adr_space. Folosiți pmap pentru a afișa zonele de memorie mapate. Câte din zonele afișate de pmap sunt asociate executabilului adr_space?
Ne propunem să determinăm pentru fiecare din secțiunile .text, .rodata, .data și .bss în ce zonă de memorie au fost încărcate. Folosiți coloana Addr din output-ul lui readelf de la punctul 1 pentru a asocia fiecare din aceste secțiuni într-o zonă de memorie din cele afișate de pmap.
Cum a știut sistemul de operare să creeze cele 3 zone de memorie?
Secțiunile conțin doar informații “statice”, care ne ajută să ne organizăm mai bine executabilul. Când un executabil este rulat, însă, se folosesc alte informații din fișierul ELF pentru a stabili ce zone de memorie se creează. Aceste informații se numesc “Program headers” sau “Segmente”.
Afișați segmentele din fișierul adr_space, folosind readelf. Doar segmentele marcate cu “LOAD” vor fi încărcate în memorie. Corespund adresele acestor segmente cu output-ul lui pmap?
Stiva
Fun
Sunt informațiile despre secțiuni absolut necesare? Analizați programul elf_magic. Câte secțiuni conține programul? Câte segmente conține programul? Credeți că programul va rula?
chmod +x elf_magic
./elf_magic