User Tools

Site Tools


laboratoare:laborator-08

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Laborator 8: Interfața în linia de comandă, analiza statică și dinamică ====== 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 ===== 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. ===== 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. * command parameters and file redirect (run) * break * step by step (step, next, continue) * disassemble (must mention intel syntax v at&t) * print/display register values, flags * print/display integers * break and compute address from registers, memory zones, etc. * print strings * print instructions, current instructions * print stack * present peda python thingie * 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 ===== 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.1449010719.txt.gz · Last modified: 2015/12/02 00:58 by adrian.bogatu