340 likes | 460 Views
Bevezetés. Elvárások. 1. előadás dr. Robu Judit szeminárium drd. Lukács Sándor. 2006. 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
E N D
Bevezetés. Elvárások 1 előadás dr. Robu Judit szeminárium drd. Lukács Sándor 2006
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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ó BBTE, Alkalmazások és operációs rendszerek optimizálása
Á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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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. BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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++ 2005 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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_optDWORD Korte, __out_deref DWORD *Kimenet) • a lokális változók mind kisbetűvel kezdődnek • intalma, intkekAlma, intpirosZoldAlma • 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
Kérdéseket várunk! • szeminárium / labor órákon • www.cs.ubbcluj.ro/~robu/optimizalas • lukacs (at) cs . ubbcluj . ro • robu (at) cs . ubbcluj . ro BBTE, Alkalmazások és operációs rendszerek optimizálása
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) BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 • 2n-x tárolódik n-1 biten BBTE, Alkalmazások és operációs rendszerek optimizálása
x86-os 16 bites memória címzés • szegmens16:offszet16 lineáris-cím20 • 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
32 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
A verem működése • paraméterek átadása • temporális tárolási hely, lokális változók BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
EFLAGS BBTE, Alkalmazások és operációs rendszerek optimizálása
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 Adatmozgató utasítások BBTE, Alkalmazások és operációs rendszerek optimizálása
Aritmetikai utasítások • ADD, SUB r/m, r/m/i • ADC, SBB r/m, r/m/i a CF-et használják átviteli bitként • INC, DEC r/m • MUL r/m AX/DX:AX/EDX:EAX ← AL/AX/EAX*r/m • DIV r/m AL ← AX DIV r/m AH ← AX MOD r/m • IMUL r/m AX/DX:AX/EDX:EAX ← AL/AX/EAX*r/m • IMUL reg,r/m reg ← reg * r/m • IMUL reg,imm reg ← reg * imm • IMUL reg,r/m,imm reg ← r/m * imm • IDIV r/m AL ← AX DIV r/m AH ← AX MOD r/m • CBW, CWD, CWDE, CDQ • NEG r/m BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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, LODSD AL/AX/EAX ← DS:(E)SI • STOSB, STOSW, STOSD ES:(E)DI ← AL/AX/EAX • MOVSB, MOVSW, MOVSD ES:(E)DI ← DS:(E)SI • CMPSB, CMPSW, CMPSD CMP DS:(E)SI, ES:(E)DI • SCASB, SCASW, SCASD CMP AL/AX/EAX, ES:(E)DI BBTE, Alkalmazások és operációs rendszerek optimizálása
Speciális utasítások • CLC, STC, CMC • CLD, STD • CMPXCHG r/m, reg • CMPXCHG8B m64 EDX:EAX ↔ m64 • LDS, LES, LSS, LFS, LGS reg,farmem • LEA reg,mem • LAHF AH ← 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
Kérdéseket várok! BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
Lehetséges projektek 2 • PE/COFF/LIB Viewer / Editorgrafikus 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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, 2-3-4-5 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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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 BBTE, Alkalmazások és operációs rendszerek optimizálása
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ó BBTE, Alkalmazások és operációs rendszerek optimizálása
Köszönöm a figyelmet! BBTE, Alkalmazások és operációs rendszerek optimizálása