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 23:22]
adrian.bogatu [interfata in linia de comanda]
laboratoare:laborator-08 [2015/12/02 00:49]
adrian.bogatu
Line 2: Line 2:
  
 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. 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 comanda ===== ===== Interfața în linia de comanda =====
  
-Deși folosirea unui mediu grafic pentru programare ​este facilă, 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-uri, lucru care ne va face viața mai ușoară în nenumărate cazuri.+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-uri, lucru care ne va face viața mai ușoară în nenumărate cazuri.
  
 În cadrul acestui laborator, vom 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. În cadrul acestui laborator, vom 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.
-===== analiza static ===== 
-  * sectiunile basic ale unui binar (bss, rodata, text) 
-  * 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 26: 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 fiecărui exercițiu.
 +
 +<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