130 likes | 249 Views
Irina Orlandea irina.orlandea@gmail.com Aurelian Ghiţă aurelian_ghita@yahoo.com. Portare Valgrind pe MIPS. Ce este LibVEX?. Biblioteca de translaţie ce funcţionează ca parte a nucleului Valgrind Permite instrumentarea codului într-o manieră generică Specificaţii funcţionale:
E N D
Irina Orlandea irina.orlandea@gmail.com Aurelian Ghiţă aurelian_ghita@yahoo.com Portare Valgrind pe MIPS
Ce este LibVEX? • Bibliotecade translaţie ce funcţionează ca parte a nucleului Valgrind • Permite instrumentarea codului într-o manieră generică • Specificaţii funcţionale: • Primeşte de la nucleu un bloc de cod maşină aparţinând programului analizat • Execută translaţia în reprezentare intermediară (RI), optimizarea codului, instrumentarea lui cu ajutorul funcţiilor oferite de utilitare şi translaţia inversă • Întoarce nucleului cod maşină gata de execuţie
Relaţia cu nucleul • LibVEX_Init – funcţie apelată de nucleu pentru iniţializarea bibliotecii de translaţie • LibVEX_Translate – execută translaţia unui bloc de cod
Structura bibliotecii Oglindeşte designul Valgrind - Combinaţie de module generice şi module dependente de arhitectură care acoperă toate fazele translaţiei
Structura bibliotecii - detalii • Fiecare arhitectură deţine două module: • Guest – translaţie cod binar → RI • Host – translaţie RI → cod binar • Plus părţi generice care ajută translaţiile • Reprezentarea intermediară (ir) • Funcţii pentru interfaţarea cu RI • Funcţii pentru optimizări (eliminarea codului nefolosit, propagarea constantelor, etc.) • Interfaţa principală a bibliotecii (main) ! Pentru portare pe MIPS trebuie introduse module guest/host specifice arhitecturii !
Reprezentarea intermediară • Declaraţii – operaţii cu efecte laterale • Scrieri în memorie / regiştri, atribuire de valori temporarelor, etc. • Expresii – operaţii fără efecte laterale • Operaţii aritmetice, încărcări din memorie, constante • Pot conţine subexpresii => structuri arborescente • Exemplu t1 = (3+(4*load(adr1)) • Blocuri de cod – secvenţe de instrucţiuni • Un singur punct de intrare, mai multe puncte de ieşire • Conţin o listă de declaraţii reprezentând codul efectiv • Se încheie cu o instrucţiune de salt la blocul următor
Portarea pe MIPS – Modulul de dezasamblare • E oferit un set redus de instrucţiuni – instrucţiuni din user-space MIPS I ce apar frecvent • Se dezasamblează instrucţiune cu instrucţiune • Rezultă o listă de declaraţii RI care conţin expresii (structură arborescentă) • La terminarea blocului de cod se notează adresa următorului bloc
Exemplu: bne a1, v1, 0x17 addu gp, gp, t9 IRBB { ---------IMark(0xFF, 4)--------- t0 = CmpNE32(GET:I32(20), GET:I32(12)) ---------IMark(0x103, 0)-------- PUT(128) = 0x103:I32 PUT(112) = Add32(GET:I32(112),GET:I32(100)) if (t0) goto {Boring} 0x15F:I32 goto {Boring} 0x107:I32 } Portarea pe MIPS – Modulul de dezasamblare (2)
Portarea pe MIPS – Selectorul de instrucţiuni • Instrucţiunile MIPS sunt modelate la modul abstract cu ajutorul unor structuri • Blocul de cod în reprezentare intermediară este parcurs declaraţie cu declaraţie • Pentru o declaraţie se parcurge întreg arborele de expresii asociat • În final rezultă o listă de instrucţiuni reprezentate abstract
IRBB { -----IMark(0xFF, 4)------ t0 = CmpNE32(GET:I32(20), GET:I32(12)) -----IMark(0x103, 0)----- PUT(128) = 0x103:I32 PUT(112) = Add32(GET:I32(112), GET:I32(100)) if (t0) goto {Boring} 0x15F:I32 goto {Boring} 0x107:I32 } mflr %r2 lw %r3,20(%r25) lw %r4,12(%r25) word_compare %r5 = ne( %r3, %r4 ) li_word %r3,0x0000000000000103 sw %r3,128(%r25) lw %r3,112(%r25) lw %r4,100(%r25) addu %r6,%r3,%r4 sw %r6,112(%r25) goto: if ( %%r5 ){ 351 } mtlr %r2 goto: (always) { 263 } Portarea pe MIPS – Selectorul de instrucţiuni (2)
Portarea pe MIPS – Generatorul de cod • Parcurge blocul de cod instrucţiune cu instrucţiune • Rezultă un şir de caractere reprezentând codul binar gata de execuţie • Organizat pe nivele
Portare pe MIPSPaşii următori • Suport pentru maşini ce folosesc reprezentarea big-endian (modulele de dezasamblare şi generare de cod) • Extinderea setului de instrucţiuni maşină oferite • Suport pentru operaţii în virgulă mobilă • Extindere de la arhitectura MIPS I la MIPS32
Referinţe • http://www.valgrind.org • http://www.mips.com Intrebări?