1 / 34

Bevezetés. Elvárások

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

bracha
Download Presentation

Bevezetés. Elvárások

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bevezetés. Elvárások 1 előadás dr. Robu Judit szeminárium drd. Lukács Sándor 2006

  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 BBTE, 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 BBTE, 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ó BBTE, 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 BBTE, 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. BBTE, 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 BBTE, 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++ 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

  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_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

  10. 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

  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) BBTE, 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 BBTE, 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 • 2n-x tárolódik n-1 biten BBTE, Alkalmazások és operációs rendszerek optimizálása

  14. 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

  15. 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

  16. 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

  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 BBTE, Alkalmazások és operációs rendszerek optimizálása

  18. EFLAGS BBTE, Alkalmazások és operációs rendszerek optimizálása

  19. 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

  20. 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

  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 BBTE, 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 BBTE, 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 BBTE, 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, 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

  25. 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

  26. Kérdéseket várok! BBTE, 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 BBTE, Alkalmazások és operációs rendszerek optimizálása

  28. 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

  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 BBTE, 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, 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

  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 BBTE, 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 BBTE, 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ó BBTE, Alkalmazások és operációs rendszerek optimizálása

  34. Köszönöm a figyelmet! BBTE, Alkalmazások és operációs rendszerek optimizálása

More Related