User Tools

Site Tools


laboratoare:laborator-08

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
Next revision Both sides next revision
laboratoare:laborator-08 [2015/12/01 22:42]
adrian.bogatu [Laborator 8: Interfața în linia de comandă, analiza statică și dinamică]
laboratoare:laborator-08 [2015/12/02 00:58]
adrian.bogatu [Tutoriale și exerciții]
Line 1: Line 1:
 ====== Laborator 8: Interfața în linia de comandă, analiza statică și dinamică ====== ====== Laborator 8: Interfața în linia de comandă, analiza statică și dinamică ======
  
-În acest laborator ​vom discuta în detaliu despre:+După un scurt breviar care va explica noțiunile introduse în acest laborator, va urma o parte practică care alternează între secțiuni de tip tutorial, cu parcurgere pas cu pas și prezentarea soluției, și exerciții care trebuie să fie rezolvate.
  
- * **interfața în linia de comandă:** folosirea utilitarelor în linia de comandă pentru asamblarea și link-editarea fișierelor sursă pentru a obține fișiere obiect și executabile +===== Interfața în linia de comanda =====
- * **analiză statică:** inspectarea diverselor aspecte legate de fișierele obiect sau executabile +
- * **analiză dinamică:​** inspectarea unui program care se află în execuție.+
  
-Laboratorul este de forma learn by doing partea practică alternând între secțiuni de tip tutorial, cu parcurgere pas cu pas și prezentarea soluției, și exerciții care trebuie ​să fie rezolvate. +Deși folosirea unui mediu grafic pentru programare poate părea mai atractivăde multe ori folosirea liniei de comandă oferă mai multă putere ​și control asupra a ceea ce vrem să facemÎn plus, folosirea utilitarelor din linia de comandă ​ în scripturi poate facilita automatizarea unor task-urilucru care ne va face viața mai ușoară în nenumărate cazuri.
-===== interfata in linia de comanda ===== +
-  * asamblare +
-  * link-editare (gcccl)+
  
-===== analiza static ===== +În cadrul acestui laboratorvom folosi utilitare în linia de comandă atât pentru asamblarea și link-editarea fișierelor sursăcât și pentru analiza statică și dinamică a programelor obținute din parcurgerea tutorialelor și a exercițiilor.
-  * sectiunile basic ale unui binar (bssrodatatext) +
-  * objdump+
  
 +===== Analiza statică =====
 +
 +Analiza statică a unui program constă în inspectarea diferitelor aspecte din fișierul obiect sau executabil.
 +
 +Câteve din programele utile pentru analiza statică pe care le vom folosi și în cadrul tutorialelor/​exercițiilor sunt:
 +
 +  * **nm** - utilitar folosit pentru insepctarea simbolurilor și secțiunilor din executabile
 +  * **objdump** - program folosit pentru dezasamblarea (traducerea din cod-mașină în limbaj de asamblare) programelor binare
 +  * **IDA** - o unealtă foarte puternică pentru dezasamblarea și inspectarea fișierelor obiect și executabile
 +
 +===== Analiza dinamică =====
 +
 +Spre deosebire de analiza statică, analiza dinamică constă în inspectarea unui program aflat în execuție. Practic, analiza dinamică se face la //​runtime//​.
 +
 +Unul dintre cele mai folosite programe pentru analiză dinamică este **gdb**. Acesta oferă o gamă largă de operații ce pot fi făcute, de la inspectarea memoriei, la schimbarea control flow-ului și până la modificarea registrelor de pe procesor, în timpul rulării unui program.
  
-===== analiza dinamica/​gdb cu exercitii de debugging asociate ===== 
   * command parameters and file redirect (run)   * command parameters and file redirect (run)
   * break   * break
Line 31: Line 38:
   * as zice debug program (dar ar fi practic sa existe cate un exercitiu de genu' la fiecare din comenzile mentionate anterior, mai ales la partile care incep cu "print something"​)   * as zice debug program (dar ar fi practic sa existe cate un exercitiu de genu' la fiecare din comenzile mentionate anterior, mai ales la partile care incep cu "print something"​)
   * debug segfault   * debug segfault
 +
 +===== Tutoriale și exerciții =====
 +
 +În cadrul exercițiilor vom folosi arhiva de laborator.
 +
 +Descărcați arhiva, decomprimați-o și accesați directorul aferent.
 +
 +<note warning>
 +Decât dacă se specifică altfel în cerință, toate utilitarele vor fi rulate din linia de comandă. Bineînțeles,​ puteți folosi orice editor text pentru a rezolva exercițiile (chiar și SASM), însă asamblarea, link-editarea etc. vor fi făcute din interfața în linia de comandă.
 +</​note>​
 +
 +==== [0.5p] 1. Tutorial: Asamblarea din linia de comandă ====
 +==== [0.5p] 2. Tutorial: Link-editarea unui fișier obiect ====
 +==== [1.5p] 3. cat (sau echo?) ====
 +==== [0.5p] 4. Tutorial: Link-editarea mai multor fișiere obiect ====
 +==== [1.5p] 5. Completarea funcțiilor ajutătoare ====
 +==== [1p] 6. Tutorial: GDB ====
 +==== [0.5p] 7. Afișarea unor informații la fiecare trecere printr-un breakpoint ====
 +==== [1p] 8. Afișarea adresei de retur a unei funcții ====
 +==== [0.5p] 9. Tutorial: Depanarea unui Segfault folosind GDB ====
 +==== [1.5p] 10. Rezolvarea unui Segfault ====
 +==== [1p] 11. Tutorial: IDA ====
 +==== [1.5p] Bonus: Modificarea control-flow-ului unui program folosind GDB ====
 +==== [2p] Bonus: Decompilarea unui program folosind IDA ====
 +
 +
 +
laboratoare/laborator-08.txt · Last modified: 2015/12/02 12:31 by vladimir.diaconescu