K1272.qxd
6.12.2005
14:47
StrÆnka 5
Obsah Úvod
13 ČÁST 1
Základy 32bitového programování ve Windows Ka p i t o l a 1
Nástroje pro programování ve Windows První program v Assembleru a jeho kompilace Objektové soubory Direktiva INVOKE Data v objektovém souboru Kompilace s využitím TASM32 Zjednodušený segmentační mód Utility pro práci s Assemblerem Editory Debuggery Disassemblery Hexadecimální editory Kompilátory zdrojů Editory zdrojů
19 19 23 25 27 28 29 30 31 31 31 33 33 34
Ka p i t o l a 2
Základy programování ve Windows Volání funkcí Struktura programu Registrace třídy okna Vytvoření okna Smyčka pro zpracování zpráv
Procedura hlavního okna Příklady jednoduchých programů pro Windows Jak to udělat v TASM32 Předávání parametrů zásobníkem
35 36 38 39 39 39
39 40 46 51
K1272.qxd
6
6.12.2005
14:47
StrÆnka 6
Obsah Ka p i t o l a 3
Jednoduché programy v Assembleru
55
Principy vytváření programů s okny Okno s tlačítkem Okno s textovým polem Okno se seznamem
55 56 62 68
Dceřiná, rodičovská a vlastněná okna
76
Ka p i t o l a 4
Přehled 16bitového programování Myšlenka 16bitového programování ve Windows Příklad 16bitového programu pro Windows
85 85 87
Ka p i t o l a 5
Kompilátory MASM32 a TASM32
93
Parametry příkazového řádku programů ML.EXE a TASM32.EXE 93 Parametry příkazového řádku programů LINK.EXE a TLINK32.EXE 96 Vkládání ladících informací do spustitelného souboru 101 Vývoj konzolových a GUI programů 102 Automatické linkování 102 Sebe-kompilující program
102
ČÁST 2
Programování ve Windows Ka p i t o l a 6
Kódování textu ve Windows Kódování textu OEM a ANSI Unicode
107 107 108 108
Ka p i t o l a 7
Příklady jednoduchých programů Výpis textu do okna Výběr fontu Grafika a obrázky
113 113 128 133
Ka p i t o l a 8
Konzolové programy Vytvoření konzoly
145 149
K1272.qxd
6.12.2005
14:47
StrÆnka 7
Obsah
Zpracování událostí klávesnice a myši Časovač v konzolových programech
7
154 160
Ka p i t o l a 9
Zdroje: editory zdrojů a kompilátory Jazyk pro popis zdrojů
169 169
Ikony Kurzory Bitmapy Řetězce Dialogy Nabídky (menu) Klávesové zkratky
170 172 173 173 173 178 183
Nemodální dialogy
186
Kompilace a linkování pomocí TASM32
191
Ka p i t o l a 10
Příklady programů využívajících zdroje Dynamické nabídky Horké klávesy Správa seznamů Programování ve stylu Windows XP
193 193 204 211 217
Ka p i t o l a 11
Práce se soubory Vlastnosti souboru Atributy souboru
Souborový systém FAT32 Souborový systém NTFS Adresáře v NTFS Komprese souborů v NTFS Body regenerace Vyhledávání souborů Kompilace programu pomocí TASM32
Práce s binárními soubory Jak získat časové údaje o souboru
223 223 224
226 229 232 232 233 234 250
251 263
K1272.qxd
8
6.12.2005
14:47
StrÆnka 8
Obsah
ČÁST 3
Sofistikovanější příklady programování ve Windows Ka p i t o l a 12
Direktivy a makro nástroje Assembleru Návěští Struktury Uniony Pohodlná metoda práce se strukturami Podmíněná kompilace Volání funkcí Opakování pomocí direktiv Makro definice Další direktivy Assembleru Konstrukty Assembleru Podmíněné konstrukty Smyčka WHILE
Vytváření programů kompilovatelných v MASM32 i TASM32
269 269 271 271 272 272 273 274 275 276 277 277 278
279
Ka p i t o l a 13
Více o správě souborů Detailní popis funkce CreateFile Další možnosti funkce CreateFile Mailslot Roury Disková zařízení
Přehled dalších funkcí pro správu souborů Asynchronní vstup a výstup
281 281 285 285 290 291
295 296
Ka p i t o l a 14
Příklady programů používajících časovač
301
Nejjednodušší příklad použití časovače Interakce mezi časovači Okna s nápovědou
302 307 313
Ka p i t o l a 15
Multitasking Vytvoření procesu Vlákna Komunikace mezi vlákny
327 327 336 342
K1272.qxd
6.12.2005
14:47
StrÆnka 9
Obsah
Semafory Události Kritické sekce Mutex
9
344 345 346 356
Ka p i t o l a 16
Dynamické knihovny Základní koncept Vytvoření knihovny DLL Implicitní linkování Využití společného adresového prostoru Paměť sdílená procesy
357 357 359 363 365 374
Ka p i t o l a 17
Síťové programování Síťová zařízení Vyhledávání a připojování k síťovým zařízením O protokolech TCP/IP Model OSI Rodina protokolů TCP/IP Adresace v protokolu IP Maska sítě Linkové adresy a adresy IP Služba DNS Dynamické adresy IP Směrování
Správa soketů Příklad jednoduchého programu klient-server
379 379 385 398 398 399 400 401 401 402 402 402
403 407
Ka p i t o l a 18
Řešení některých problémů programování ve Windows Umístění ikony do systémové lišty Zpracování souborů Omezení vstupu do textového pole Výměna dat mezi procesy Zabránění vícenásobného spuštění programu Operace se skupinami souborů a adresáři Tiskový výstup Seznam běžících procesů
421 421 427 429 438 444 444 446 446
K1272.qxd
10
6.12.2005
14:47
StrÆnka 10
Obsah
ČÁST 4
Debugging, analýza kódu, vývoj ovladačů Ka p i t o l a 19
Systémové programování ve Windows Stránkování a segmentace Adresový prostor procesu Správa paměti
Háky
455 455 459 461
467
Ka p i t o l a 2 0
Používání Assembleru společně s vyššími programovacími jazyky 477 Koordinace volání Koordinace názvů Koordinace parametrů Jednoduchý příklad použití Assembleru ve vyšším programovacím jazyce Borland C++ 5.0 Visual C++ 7.0 Delphi 7.0
Předávání parametrů pomocí registrů Volání funkcí API a zdroje v programech vytvořených v Assembleru Kombinované použití jazyka C a Assembleru Přímý zápis kódu v Assembleru ve vyšším programovacím jazyce Příklad použití dynamické knihovny
477 478 479 480 480 481 482
484 485 490 497 498
Ka p i t o l a 21
Programování služeb
503
Základy služeb Struktura služeb Ukázka služby
503 506 510
Ka p i t o l a 2 2
Přehled debuggerů a disassemblerů
527
Utility Microsoftu
527
EDITBIN.EXE DUMPBIN.EXE
527 529
Utility od dalších vývojářů DUMPPE.EXE
530 530
K1272.qxd
6.12.2005
14:47
StrÆnka 11
Obsah
HIEW.EXE DEWIN.EXE IDA Pro
11
531 533 533
Ka p i t o l a 2 3
Základy Turbo Debuggeru Ladění programů vytvořených ve vyšších programovacích jazycích Technika ladění
537 541 542
Ka p i t o l a 24
Práce s disassemblerem W32Dasm a debuggerem SoftIce Debugger W32Dasm Začínáme Navigace v disassemblovaném kódu Zobrazení dat Zobrazení importovaných a exportovaných funkcí Zobrazení zdrojů Práce s kódem Načítání programů pro ladění Práce s knihovnami DLL Breakpointy Modifikace kódu, dat a obsahu registrů Další možnosti práce s funkcemi API Hledání požadovaného místa v programu
Debugger SoftIce Instalace Načtení programu pro ladění Přehled příkazů programu SoftIce
545 545 545 547 548 549 549 550 550 551 551 552 553 553
554 554 555 555
Ka p i t o l a 2 5
Základy analýzy kódu Proměnné a konstanty Základní struktury jazyka C Podmíněné konstrukty Vnořené podmíněné konstrukty Switch Cykly Lokální proměnné Funkce
Optimalizace kódu Rychlost vs. velikost
559 559 563 563 564 564 565 566 567
568 570
K1272.qxd
12
6.12.2005
14:47
StrÆnka 12
Obsah
Optimalizace podmíněných skoků Optimalizace volání funkcí
Objektově orientované programování
571 571
572
Ka p i t o l a 2 6
Oprava spustitelných souborů Praktický příklad opravení spustitelného souboru Hledání procedury okna
577 577 580
Ka p i t o l a 27
Struktura a vývoj ovladačů VxD ovladače Popis projektu Příklad ovladače Dynamické virtuální ovladače
Základy ovladačů pracujících v režimu jádra Jádro a struktura paměti Ovládání ovladačů Příklad jednoduchého ovladače pracujícího v režimu jádra Ovladače pracující v režimu jádra a zařízení
Bibliografie Rejstřík
583 583 585 588 591
596 597 598 599 612
624 625