Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
sesiuni:memory:2 [2013/07/08 13:10]
asendroiu [Stiva]
sesiuni:memory:2 [2013/07/09 16:05]
asendroiu [Virtual Memory. Stack]
Line 1: Line 1:
 += Virtual Memory. Stack =
 +* [[sesiuni:​memory:​| Back to workshop]]
 +* {{:​sesiuni:​memory:​session-02.pdf|Download slides}}
 +* {{:​sesiuni:​memory:​session-02-tasks.zip|Download tasks}}
 = Tasks = = Tasks =
-== Memoria ​Virtuala. Spațiul de adresă ==+ 
 +Rulați ''​make''​ pentru a compila sursele din directorul session-02-tasks. 
 + 
 +== Memoria ​Virtuală. Spațiul de adresă ==
   - Formatul ELF   - 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)+    * 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?     * 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   - Secțiunile unui executabil
Line 19: Line 26:
   - Rulați programul ''​return_array''​. De ce nu funcționează?​ Corectați programul astfel încât să funcționeze corect.   - Rulați programul ''​return_array''​. De ce nu funcționează?​ Corectați programul astfel încât să funcționeze corect.
   - Rulați programul ''​params''​. Cum explicați comportamentul?​   - Rulați programul ''​params''​. Cum explicați comportamentul?​
-  - Rulați programul ''​stackframe''​. Programul realizează apelurile de funcții ''​main''​ -> ''​f''​ -> ''​g''​. Funcția g afișează conținutul stivei. Identificați frame-urile corespunzătoare funcțiilor ''​main'',​ ''​f''​ și ''​g''​.+  - Rulați programul ''​stackframe''​. Programul realizează apelurile de funcții ''​main''​ -> ''​f''​ -> ''​g''​. Funcția g afișează conținutul stivei. Identificați frame-urile corespunzătoare funcțiilor ''​main'',​ ''​f''​ și ''​g''​. Care sunt adresele de return? Folosiți utilitarul ''​addr2line''​ pentru a verifica faptul că adresa de return este într-adevăr imediat după apelul funcției. 
 + 
 +== GDB == 
 +  - Rulați programul ''​bug''​. Vom folosi GDB pentru a identifica motivul erorii. 
 + 
 +<​code>​ 
 +gdb ./bug 
 +</​code>​ 
 + 
 +<​code>​ 
 +(gdb) run 
 +</​code>​ 
 + 
 +Programul se va opri la linia care a cauzat accesul invalid. Pentru a afișa valorile variabilelor folosim comanda ''​print''​. 
 + 
 +După ce am identificat ce variabilă are o valoare nevalidă vrem să aflăm motivul pentru care a ajuns așa. Folosiți comanda ''​backtrace''​ pentru a afișa stiva de apeluri. 
 + 
 +<​code>​ 
 +(gdb) backtrace 
 +#0  0x0804846a in initialize (entries=0x0,​ num=5) at bug.c:15 
 +#1  0x080484c5 in allocate (n=5) at bug.c:31 
 +#2  0x080484df in main () at bug.c:41 
 +</​code>​ 
 + 
 +Folosiți comanda ''​frame''​ pentru a vă muta în cadrul unui alt frame din stiva de apeluri 
 +<​code>​ 
 +(gdb) frame 1 
 +#1  0x080484c5 in allocate (n=5) at bug.c:31 
 +31 initialize(w,​ n); 
 +</​code>​ 
 + 
 +Verificați valorile cu care a fost apelată funcția ''​initialize''​. De unde provin aceste valori? Folosiți comanda ''​list''​ pentru a afișa codul sursă din jurul liniei curente. Investigați celelalte variabile din funcție și identificați sursa problemei.
 == Fun == == 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?   - 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?
sesiuni/memory/2.txt · Last modified: 2013/07/09 16:07 by asendroiu