Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Bevezetés. Elvárások előadás dr. Robu Judit szeminárium drd. Lukács Sándor
BBTE, Alkalmazások és operációs rendszerek optimizálása 2 Bevezető a kurzus „tematikai” célja: egy rövid betekintőt nyújtani „hardverközeli” programozási területekre assembly szintű optimalizálások Windows NT driverek fejlesztése a kurzusban szereplő témák egyik közös pontja: mindenikük valamilyen módon elvárja a kíválóan megírt, részletekbe menően optimizált programozást a kurzus „gyakorlatias” célja: minden hallgató aktívan vegyen részt egy precízen, rendszerezetten megírt projekt fejlesztésében
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 3 Előadások a félév során 1 2. Programok fordítása, szerkesztése, végrehajtása (Visual C, Windows) 3. x86-os védett üzemmód (Windows NT alatt) 4. Az AMD64 architektúra bemutatása 5. Programok visszafejtése, dizassembly. Debuggerek és Profilerek 6. SIMD MMX assembly programozás 7. SIMD SSE assembly programozás
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 4 Előadások a félév során 2 8. Forráskód szintű optimizálások C-ben 9. Assembly szintű optimizálások 10. Windows NT kernel architektúra 11. Windows NT driverek fejlesztése I 12. Windows NT driverek fejlesztése II majd elválik, mi lesz igazából jó
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 5 Általános elvárások nincs félév végén elméleti vizsga a vizsga helyett féléves projekt + dokumentációk előadásra járni nem kötelező minden előadás végén 1 kérdéses teszt és egyben jelenlét íródik; egy helyes válasz 0,1 pont szemináriumokra járni általában nem kötelező a szemináriumokon időnként be kell mutatni a projekt és a dokumentációk helyzetét szemináriumok (laborok) szabad beszélgetés az előadás témáival és a projektekkel kapcsolatosan
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 6 Vizsgára leadandók egy csoportos projekt (2-4 személy) egy, a projekthez tartozó dolgozat az elméleti és technikai háttér bemutatása az implementáció fontosabb-specifikusabb részei felhasználói dokumentáció egy programozói dokumentációt minden egyes modul, függvény, struktúra stb. szerepe, szemantikai és funkcionális leírása javasolt a Doxygen generátor használata (C-re) rövid (max. 10 perces) power-point bemutató mindez a 12-ik tanhét végig leadandó mindenik rész kötelező; amennyiben bármelyik rész hiányzik, vagy nem megfelelő színvonalú, a vizsga végső jegye 4, függetlenül a további részek minőségétől, jelenléttől stb.
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 7 A dolgozattal kapcsolatos elvárások könnyen olvasható, átlátható, követhető elvártak: absztrakt, tartalomjegyzék, bibliográfia a bibliográfiai bejegyzésekről egy-egy rövid bemutatót várunk el (5-15 sor) a bibliográfiára mutató referenciák legyenek pontosak (forrástól függően oldal szám, fejezet szám, alcím) Times New Roman 12 pontos betűtípus, másfeles sorköz, ékezetes karakterek, jól struktúrált van egy segítő sablon (nem kötelező használni) a programozói dokumentációhoz javasolt a Doxygen nem kötelező: másképpen megírt alapos, pontos dokumentációt is elfogadunk
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 8 Projekttel kapcsolatos elvárások 1 minden projekt többszemélyes (2-4) minden hallgató egyaránt kódol és dokumentál a leadott dokumentációban és a forrásállományok fejlécében (history) legyen pontosan leírva, ki mikor mit írt-kódolt a projektek nagy része C-ben lesz megírva elvárt az alaposan megírt, könnyen olvasható, rendszerezett, helyesen tördelt, részletesen kommentelt forráskód ezekre extrém mértékben érzékenyek vagyunk, bármilyen mulasztás szigorúan megbírálódik egy projekt Visual C/C alatt, Warning Level 4-el fordítva 0 hibával és 0 figyelmeztetéssel fordítható kell legyen részben fel lehet GNU GPL, Mozilla Public, BSD stb. licenszű forráskódot használni a projekthez, a kódrész pontos megjelölésével
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 9 Projekttel kapcsolatos elvárások 2 egy függvény maximum 50 soros lehet minden függvény visszatérési értékét ellenőrizni kell kivéve alapvető eseteket, mint pl. printf minden paraméter értékét ellenőrizni kell (minimum ASSERT) a struktúrák, felsorolások és típusok nevei mind nagybetűvel íródnak MY_LITTLE_STRUCT, MY_BIG_ENUM, DWORD a függvények elnevezése kapitálisokkal történik MyShortFunction, MyCrazyIterativeStub a paraméterek mind nagy betűvel keződnek és SAL-al íródnak (__in int Alma, __in_opt DWORD Korte, __out_deref DWORD *Kimenet) a lokális változók mind kisbetűvel kezdődnek int alma, int kekAlma, int pirosZoldAlma minden if, while, for stb. ciklust kötelezően blokk utasítás követ, még akkor is, ha csak egy utasítást tartalmaz
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 10 Kérdéseket várunk! szeminárium / labor órákon lukacs (at) cs. ubbcluj. ro robu (at) cs. ubbcluj. ro
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 11 Elvárt előzetes ismeretek elvárt: az x86-os ASM ismeret a C nyelv alapos ismerete, valamint a Visual C környezet ismerete (C++ jól fog) a Win32 API programozás alapvető ismerete dokumentációk olvasása, információk keresése (MSDN, Google, fejlesztői fórumok)
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 12 x86-os architektúra 8 általános regiszter 6 szegmens regiszter valós üzemmód (real mode) 16 bites, DOS védett üzemmód (protected mode) 32 bites, Windows, Linux (E)FLAGS CS:(E)IP – aktuális kód DS, ES – adat SS:(E)SP – verem FS, GS – speciális szerep (E)SI, (E)DI – index regiszterek
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 13 Komplementer kód egész értékek ábrázolása gyors és egyszerű aritmetikai műveletek legnagyobb helyértékű bit = előjel bit pozitív érékek az előjel bit 0 a pozitív érték tárolódik n-1 biten negatív érékek az előjel bit 1 2 n -x tárolódik n-1 biten
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 14 x86-os 16 bites memória címzés szegmens 16 :offszet 16 lineáris-cím 20 SSSS0 + OOOO LLLLL near és far pointerek memória modellek (DOS, Turbo Pascal stb.) tiny(nn), small(nn), medium(fn), compact(nf), large(ff) a memória címzése és az operandusok mérete egymástól függetlenül lehet 16 illetve 32 bites
2006BBTE, Alkalmazások és operációs rendszerek optimizálása bites regiszterek elérése mindig elérhetők, 16 bites módban is 0x66 prefix: 16 bites ↔ 32 bites operandusok 0x67 prefix: 16 bites ↔ 32 bites címzés
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 16 A verem működése paraméterek átadása temporális tárolási hely, lokális változók
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 17 Paraméterek átadása Pascal konvenció (pascal) paraméterek a megadott sorrendben a hivott fél takarítja a vermet C konvenció (cdecl) paraméterek fordított sorrendben a hivó fél takarítja a vermet stdcall konvenció paraméterek fordított sorrendben a hivott fél takarítja a vermet register / fastcall konvenció az első két paraméter ECX, EDX (MS specifikus) általában a hivott fél takarítja a vermet
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 18 EFLAGS
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 19 Adatmozgató utasítások MOV reg, reg MOV reg, mem MOV mem, reg MOV reg, imm MOV mem, imm XCHG r/m, r/m MOVSX r/m, r/m MOVZX r/m, r/m PUSH r/m/i POP r/m PUSHA, POPA PUSHF, POPF BSWAP r32 XLAT nem módosítják a flageket
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 20 Aritmetikai utasítások ADD, SUB r/m, r/m/i ADC, SBB r/m, r/m/ia CF-et használják átviteli bitként INC, DEC r/m MUL r/mAX/DX:AX/EDX:EAX ← AL/AX/EAX*r/m DIV r/mAL ← AX DIV r/m AH ← AX MOD r/m IMUL r/mAX/DX:AX/EDX:EAX ← AL/AX/EAX*r/m IMUL reg,r/mreg ← reg * r/m IMUL reg,immreg ← reg * imm IMUL reg,r/m,immreg ← r/m * imm IDIV r/mAL ← AX DIV r/m AH ← AX MOD r/m CBW, CWD, CWDE, CDQ NEG r/m
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 21 Logikai utasítások AND r/m, r/m/i OR r/m, r/m/i XOR r/m, r/m/i NOT r/m TEST r/m, r/m/i módosítják a SF, ZF és PF flaget AND01OR XOR01NOT
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 22 Bitmanipuláló utasítások 1 bit eltolás – SHL, SAL, SHR, SAR r/m,i8 vagy r/m,CL a legutolsó kimenő bit CF-be kerül dupla eltolás – SHLD, SHRD r/m,r,i8 vagy r/m,r,CL bitforgatás – ROL, ROR, RCL, RCR bitteszt – BT, BTS, BTR, BTC a tesztelt bit CF-be kerül bitkeresés – BSF, BSR r,r/m legkisebb/legnagyobb helyértékű 1 bit keresése ZF = 1 ha nincs r/m-ben 1-es bit
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 23 Végrehajtást vezérlő utasítások feltétel nélküli ugrás – JMP címke eljáráshívás – CALL címke RET vagy RET i16 megszakításhívás – INT i8 IRET összehasonlítás – CMP r/m,r/m/i feltételes ugrás – Jcc címke JC, JNC, JZ, JNZ, JP, JNP, JS, JNS, JO, JNO,... előjeles – JL, JG, JLE, JGE, JNL, JNG,... előjel nélküli – JB, JA, JBE, JAE, JNB, JNA,... LOOP címke, LOOPZ címke (ZF=1), LOOPNZ címke (ZF=0) JCXZ címke, JECXZ címke
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 24 String utasítások, REP prefixek DS:(E)SI forrás string ES:(E)DI cél string minden iteráció után nő (E)SI és (E)DI ha DF=0, csökken, ha DF=1 LODSB, LODSW, LODSDAL/AX/EAX ← DS:(E)SI STOSB, STOSW, STOSDES:(E)DI ← AL/AX/EAX MOVSB, MOVSW, MOVSDES:(E)DI ← DS:(E)SI CMPSB, CMPSW, CMPSD CMP DS:(E)SI, ES:(E)DI SCASB, SCASW, SCASDCMP AL/AX/EAX, ES:(E)DI
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 25 Speciális utasítások CLC, STC, CMC CLD, STD CMPXCHG r/m, reg CMPXCHG8B m64EDX:EAX ↔ m64 LDS, LES, LSS, LFS, LGS reg,farmem LEA reg,mem LAHFAH ← SF:ZF:0:AF:0:PF:1:CF IN AL/AX/EAX, i8 vagy AL/AX/EAX, DX OUT i8, AL/AX/EAX vagy DX, AL/AX/EAX NOP LOCK prefix
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 26 Kérdéseket várok!
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 27 Lehetséges projektek 1 más javaslatokat is elfogadunk, előzetes megegyezés alapján Dizassembler 3-4 személy 16, 32 és 64 bites kód SSE, SSE2, SSE3, MMX, FPU, 3DNow! tiszta kód szegmens visszafordítása PE és PE64 állományok visszafordítása eljárások, címkék feltérképezése fordítható kód készítése pontos és részletes paracs-sor interfész listingek
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 28 Lehetséges projektek 2 PE / COFF / LIB Viewer / Editor grafikus interfésszel 3-4 személy (jó ha van Visual C++ GUI tapasztalat, esetleg Borland C++ Builder) fejlécek feltérképezése szekciók, importok, exportok (adat és kód) hex és raw dumpok, exportok és importok dizassembly 1 függvényre vagy teljes állományra (NDISASM vagy előző projekt) elemzés egy állományon belül tetszőleges pozícióról fejlécek, szekciók, exportok stb. kimentése, betöltése és módosítása
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 29 Lehetséges projektek 3 32/64 bites assembler 4 személy MS COFF kimenet (MS linker és Alink kompatibilitás) tiszta bináris kimenet Intel és AT&T szintaxis (2 frontend, FLEX / BISON) SSE, SSE2, SSE3, FPU, MMX, 3DNow! NASM (vagy MASM) kompatibilitási fordítás makrók támogatása
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 30 Lehetséges projektek 4 Bináris és N-áris adatstruktúrák 3 személy C és ASM kód implementálása a dokumentációban részletesen bemutatni az algoritmusokat általános C kód, könnyen adaptálható különböző adatstruktúrákra 32 bites egész, 64 bites egész és karakterlánc típusú kulcsok inicializálás, beszúrás, törlés, keresés, felszabadítás, egy adott állapot helyességének ellenőrzése AVL fa, Piros-Fekete fa, Splay fa, bináris fa, B fa, B+ fa, 2-3 fa, fa, Hash tábla, duplán láncolt lista statisztikák készítése (beszúrások száma, kiegyenlítések száma, futási idő stb.) teszt / statisztikát készítő programok
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 31 Lehetséges projektek 5 NT Driver Varázsló Visual Studio 2005 alá 3 személy egy főprojekt generálása (empty, basic skeleton, minifilter, device I/O, talán WDM) kontroll projektek generálása Win32 library projektek generálása DDKBUILD, WDK, PREfast integrálás backup integrálás dinamikus verziószám stb. bővíthető, konfigurálható sablonok példa projektek
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 32 Lehetséges projektek 6 NT Kernel Explorer / Monitor driver 4 személy GUI (Visual C++) és parancssor interfész CPU MSR regiszterek monitorizálása IDT, GDT, lapozási táblák feltérképezése processzek és teljes memória feltérképezése registry monitorizálás távoli PC monitorizálása
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 33 Lehetséges projektek 7 Statikus forráskód stíluselemző C-re 2-3 személy tördelési stílus változók és függvények elnevezése kommentálási stílus nagy hibatűrő képesség (hibás bemenet) konfigurálható stílusállományok automatikus tördelési korrekció
2006BBTE, Alkalmazások és operációs rendszerek optimizálása 34 Köszönöm a figyelmet!