This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
laboratoare:laborator-08 [2015/12/01 23:30] adrian.bogatu [analiza static] |
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ă ===== | ===== Analiza statică ===== | ||
Line 17: | Line 19: | ||
* **IDA** - o unealtă foarte puternică pentru dezasamblarea și inspectarea fișierelor obiect și executabile | * **IDA** - o unealtă foarte puternică pentru dezasamblarea și inspectarea fișierelor obiect și executabile | ||
- | ===== analiza dinamica/gdb cu exercitii de debugging asociate ===== | + | ===== 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. | ||
* 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 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 ==== | ||
+ | |||
+ | |||
+ |