Vysoke´Ucˇenítechnicke´V Brneˇ
Total Page:16
File Type:pdf, Size:1020Kb
VYSOKE´ UCˇ ENI´ TECHNICKE´ V BRNEˇ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMACˇ NI´CH TECHNOLOGII´ U´ STAV INFORMACˇ NI´CH SYSTE´ MU˚ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS NA´ STROJE PRO KONVERZI FORMA´TU˚ SPUSTITELNY´ CH SOUBORU˚ BAKALA´ Rˇ SKA´ PRA´ CE BACHELOR’S THESIS AUTOR PRA´ CE PETER MATULA AUTHOR BRNO 2011 VYSOKE´ UCˇ ENI´ TECHNICKE´ V BRNEˇ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMACˇ NI´CH TECHNOLOGII´ U´ STAV INFORMACˇ NI´CH SYSTE´ MU˚ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS NA´ STROJE PRO KONVERZI FORMA´TU˚ SPUSTITELNY´ CH SOUBORU˚ TOOLS FOR EXECUTABLE FILE FORMAT CONVERSIONS BAKALA´ Rˇ SKA´ PRA´ CE BACHELOR’S THESIS AUTOR PRA´ CE PETER MATULA AUTHOR VEDOUCI´ PRA´ CE Prof. Ing. HRUSˇ KA TOMA´ Sˇ , CSc. SUPERVISOR BRNO 2011 Abstrakt Táto práce popisuje metody a postupy používané ku konverzi formátù objektových souborù. Pøedstavuje několik obecně používaných formátù (ELF, PE, E32Image, DEX) a objektový formát projektu Lissom (LOFF). Obsahuje základní informace o knihovnách manipulujících tyto formáty a popis nové knihovny spravující E32Image. Primárním ukolem je implemen- tace programu pro konverzi souborù mezi obecně používanými formáty a formátem LOFF. Tento problém je øe¹en mapováním v¹ech kritických informací z jedné struktury formátu do druhé. Za tímto úèelem bylo nutné upravit a rozšířit některé vlastnosti formátu projektu Lissom. Výsledek je program využívajicí pluginovací systém, schopný vytváøet validní a spustitelné soubory ve zmíněných formátech. Abstract This paper describes methods and procedures used for object file format conversions. It introduces several commonly used formats (ELF, PE, E32Image, DEX) and project Lissom's object file format (LOFF). It contains basic information about libraries manipulating these formats and a description of a new library managing E32Image. The primary objective is to implement a program converting files between common formats and LOFF. This problem is solved by mapping all critical information from one format structures to another. To accomplish this task, it was necessary to modify and extend some features of Lissom object format. The result is the plugin based application capable of creating valid and runnable executable files in mentioned formats. Klíčová slova Konverze objektových souborù, objektové soubory, zpětný prěklad, dekompilátor, disasem- bler, Lissom, LOFF, ELF, PE, E32Image, DEX, BFD. Keywords Object file conversion, object file formats, decompilation, decompiler, disassembler, Lissom, LOFF, ELF, PE, E32Image, DEX, BFD. Citace Peter Matula: Nástroje pro konverzi formátù spustitelných souborù, bakaláøská práce, Brno, FIT VUT v Brně, 2011 Nástroje pro konverzi formátù spustitelných souborù Prohlášení Prohla¹uji, že jsem tuto bakaláøskou práci vypracoval samostatně pod vedením pana Prof. Tomá¹a Hru¹ky. Další informace mi poskytli Ing. Jakub Køoustek, Ing. Adam Husár a Ing. Zdeněk Pøikryl. Uvedl jsem v¹echny literární prameny a publikace, ze kterých jsem èerpal. ....................... Peter Matula 18. května 2011 Poděkování Na tomto místě bych rád poděkoval mému vedoucímu Prof. Tomá¹u Hru¹kovi a mému kon- zultantovi Ing. Jakubu Køoustkovi za odborné vedení, poskytnuté rady a možnosť zapoji» se do projektu Lissom. Dále bych chtěl poděkovat èlenùm projektu za mnoho užitečných podnětů. c Peter Matula, 2011. Tato práce vznikla jako školní dílo na Vysokém učení technickém v Brně, Fakultě informa- čních technologií. Práce je chráněna autorským zákonem a její užití bez udělení oprávnění autorem je nezákonné, s výjimkou zákonem definovaných případů. Obsah 1 Úvod 3 2 Projekt Lissom5 2.1 Cieľ práce.....................................5 2.2 Dekompilátor...................................5 2.3 Testovanie binárnej kompatibility........................6 3 Formáty objektových súborov7 3.1 LOFF.......................................8 3.1.1 ©truktúra LOFF formátu........................8 3.2 UNIX ELF.................................... 10 3.2.1 ©truktúra ELF formátu......................... 10 3.3 Windows PE................................... 12 3.3.1 ©truktúra PE formátu.......................... 12 3.4 Symbian E32Image................................ 14 3.4.1 História Symbian OS........................... 14 3.4.2 ©truktúra E32Image formátu...................... 15 3.5 Android DEX................................... 17 3.5.1 ©truktúra formátu............................ 18 4 Zmeny vo formáte LOFF 20 4.1 Adresovanie po bajtoch............................. 20 4.2 Zaznamenanie vstupnej adresy programu.................... 21 4.3 Rozšírenie príznakov............................... 21 4.4 Zmena datového typu masky relokácie..................... 22 5 Nástroje pre vzájomnú konverziu formátov 23 5.1 Objfilelib..................................... 23 5.2 Knižnica BFD................................... 24 5.3 Knižnica PeLib.................................. 24 5.4 Knižnica E32lib.................................. 25 5.5 Knižnica DEXlib................................. 26 6 Aplikácia bintran 27 6.1 Pluginovacie systémy............................... 27 6.2 Rozhranie aplikácie v C/C++.......................... 28 6.3 Hostiteľská aplikácia............................... 29 6.4 Plugin bfdtoloff.................................. 30 1 6.4.1 Postup konverzie............................. 30 6.4.2 Roz¹írenia pluginu bfdtoloff....................... 31 6.4.3 Zhodnotenie konverzie.......................... 31 6.5 Plugin lofftobfd.................................. 31 6.5.1 Postup konverzie............................. 31 6.5.2 Úprava výsledných PE súborov..................... 32 6.6 Plugin e32toloff.................................. 33 6.6.1 Postup konverzie............................. 33 6.7 Plugin lofftoe32.................................. 34 6.7.1 Postup konverzie............................. 34 6.8 Plugin dextoloff.................................. 34 6.8.1 Postup konverzie............................. 34 7 Testovanie aplikácie 37 7.1 Testovanie konverzie formátov ELF a PE do formátu LOFF......... 37 7.1.1 Princíp testu............................... 37 7.1.2 ©pecifikácia testu............................. 37 7.1.3 Výsledok testu.............................. 37 7.2 Testovanie konverzie formátu LOFF do formátu ELF............. 38 7.2.1 Princíp testu............................... 39 7.2.2 ©pecifikácia testu............................. 39 7.2.3 Výsledok testu.............................. 39 7.3 Testovanie konverzie medzi formátmi E32Image a LOFF........... 39 7.3.1 Princíp testu............................... 39 7.3.2 ©pecifikácia testu............................. 39 7.3.3 Výsledok testu.............................. 40 7.4 Testovanie konverzie z formátu DEX do formátu LOFF........... 40 8 Záver 42 A Model formátov LOFF a DEX 45 B Model tried E32lib. 47 C Obsah CD 48 2 Kapitola 1 Úvod V súèasnej dobe sú vstavané systémy (anglicky embedded systems) súèas»ou života väčšiny ľudí a môžeme ich nájs» takmer vo všetkých, èo len trochu komplikovanej¹ich elektronických zariadeniach. Výroba takýchto zariadení prirodzene priná¹a obrovské zisky, konkurencia je veľká a tlak na rýchly a lacný vývoj nových systémov rastie. To ako rýchlo dokáže výrobca vyvinú» optimálne rie¹enie vo veľkej miere rozhoduje o úspechu alebo neúspechu. Práve preto sa hľadajú inovatívne spôsoby, ako pristupova» k výrobe nových architektúr. Jedným z riešení je takzvaný hardware-software codesign, spoloèný proces návrhu hardwaru a softwaru. Proces návrhu začína modelovaním procesoru (anglicky Central Processing Unit, CPU) v niektorom z jazykov pre popis architektúr (anglicky Architecture Description Lan- guages, ADL). Najèastej¹ie sa používajú zmie¹ané jazyky umožnujúce namodelova» zdroje, model správania, model èasovania a zároveň in¹trukènú sadu. Na základe takéhoto modelu sa vygenerujú ¹pecifické nástroje. Generovanie prebieha automaticky, teda veľmi rýchlo v porovnaní s manuálnym vývojom. Cieľom sú minimálne asemblér a linker, potrebné pre tvorbu programov spustiteľných na modelovanom procesore. Na rovnakom princípe v¹ak môžu by» vygenerované aj iné nástroje ako napríklad ladiaci nástroj alebo prekladaè. Pre testovanie kvality navrhnutého procesoru je potrebné sledova» jeho výkon pri spracovaní programu vytvoreného pomocou generovaných nástrojov. Aby nebolo nutné v každej iterá- cií procesor fyzicky vyrobi», používa sa simulátor. Ten dokáže napodobni» èinnos» CPU pri vykonávaní programu. Práca procesoru sa vyhodnotí a v prípade neuspokojivého výsledku pokraèuje vývoj ďalšou iteráciou { vytvorením nového modelu. Výhody takéhoto prístupu sú zjavné. Automatizované generovanie nástrojov urýchli a ulahčí prácu a simulácia odstráni nutnos» nákladnej výroby testovacích procesorov. Práve vývojom podobného nástroja sa zaoberá aj projekt Lissom, pre potreby ktorého vznikla táto práca. Cieľom bakalárskej práce je vytvori» program schopný obojsmernej konverzie medzi obecne používanými objektovými formátmi a formátom používaným nástrojmi projektu Lissom. Prièom transformácia by sa mala zamera» primárne na spustiteľné súbory. Informácie o projekte Lissom a úlohe, ktorú v ňom práca zohráva sú uvedené v kapitole 2. V krátkosti je vysvetlený pojem dekompilátor, ako hlavný užívateľ vzniknutej aplikácie. Nasleduje popis objektového formátu projektu Lissom a predstavenie obecných for- mátov operaèných systémov UNIX, Windows, Symbian a Android. ©tvrtá kapitola popisuje zmeny navrhnuté a implementované autorom práce na for- máte projektu Lissom za úèelom zdokonalenia jeho schopnosti zaznamena»