Vous êtes sur la page 1sur 24

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Asembler. Podrcznik
programisty
Autor: Vlad Pirogow
Tumaczenie: Wojciech Moch
ISBN: 83-7361-797-3
Tytu oryginau: The Assembly Programming Master Book
Format: B5, stron: 640
Tajniki tworzenia programw dla systemu Windows w asemblerze
Poznaj narzdzia programistyczne
Napisz programy wykorzystujce Windows API
Wykryj i usu bdy z programw asemblerowych
Pisanie programw w asemblerze przez dugi czas kojarzyo si z systemem MS-DOS.
Teraz asembler powoli odzyskuje stracon pozycj jzyka programowania dla systemu
Windows. Wrd wielu zalet asemblera mona wymieni: bezporedni dostp do
procesora, zwarty i niewielki kod wynikowy oraz moliwoci trudne do uzyskania
za pomoc jzykw wysokiego poziomu. Asembler jest niezbdny przy tworzeniu
sterownikw dla urzdze zewntrznych, a korzystanie z niego uczy mylenia
algorytmicznego, od ktrego jzyki obiektowe stopniowo odzwyczajaj programistw.
Ksika Asembler. Podrcznik programisty to kompendium wiedzy dotyczcej pisania
programw dla systemu Windows w jzyku asemblera. Znajdziesz w niej opisy narzdzi
programistycznych i sposoby korzystania z procedur Windows API. Nauczysz si
tworzy programy dla Windows od najprostszych, wykorzystujcych konsol,
a do skomplikowanych aplikacji z interfejsem graficznym. Dowiesz si, jak korzysta
z narzdzi do wykrywania i usuwania bdw, a take poznasz zasady stosowania
asemblera w poczeniu z jzykami wysokiego poziomu.
Narzdzia programistyczne dla systemu Windows
Wywoywanie funkcji Windows API
Programy dziaajce w trybie tekstowym
Tworzenie i wykorzystywanie zasobw
Praca z systemem plikw
Tworzenie bibliotek DLL
Programowanie sieciowe
Wykorzystywanie asemblera w jzykach wysokiego poziomu
Turbo Debugger
Tworzenie sterownikw
Odkryj nieznane obszary programowania -- poznaj jzyk asemblera

Spis treci
Wstp .............................................................................................. 9

Cz I

Podstawy programowania 32-bitowego


w systemach Windows ..................................................13

Rozdzia 1. Narzdzia programistyczne dla systemu Windows ............................ 15


Pierwszy program w asemblerze i jego przeksztacenia ................................................. 15
Moduy obiektowe .......................................................................................................... 20
Dyrektywa INVOKE ...................................................................................................... 22
Dane w module obiektowym .......................................................................................... 24
Asemblacja programem TASM ...................................................................................... 25
Uproszczony tryb segmentacji ........................................................................................ 26
Inne narzdzia uywane do pracy z asemblerem ............................................................ 27
Edytory ..................................................................................................................... 28
Programy uruchomieniowe ...................................................................................... 28
Deasemblery ............................................................................................................. 29
Edytory szesnastkowe .............................................................................................. 31
Kompilatory zasobw .............................................................................................. 31
Edytory zasobw ...................................................................................................... 31

Rozdzia 2. Podstawy programowania w systemie Windows ............................... 33


Wywoywanie funkcji API ............................................................................................. 34
Struktura programu ......................................................................................................... 37
Rejestracja klasy okna .............................................................................................. 37
Tworzenie okna ........................................................................................................ 37
Ptla obsugi komunikatw ...................................................................................... 37
Procedura okna gwnego ........................................................................................ 38
Przykady prostych programw okienkowych ................................................................ 39
Jak to zrobi w asemblerze TASM32? ........................................................................... 45
Przekazywanie parametrw poprzez stos ....................................................................... 49

Rozdzia 3. Proste programy w jzyku asemblera ............................................... 53


Zasady budowania aplikacji w systemie Windows ......................................................... 53
Okno z przyciskiem ........................................................................................................ 55
Okno z polem edycyjnym ............................................................................................... 59
Okno z list .................................................................................................................... 65
Okna potomne i okna posiadane ..................................................................................... 72

Asembler. Podrcznik programisty

Rozdzia 4. Przegld programowania 16-bitowego .............................................. 81


Zasady programowania 16-bitowego w systemie Windows ........................................... 81
Przykad aplikacji 16-bitowej ................................................................................... 83

Rozdzia 5. Asemblery MASM i TASM ............................................................... 89


Opcje wiersza polece asemblerw ml.exe i tasm32.exe ............................................... 89
Opcje wiersza polece konsolidatorw link.exe i tlink32.exe ........................................ 92
Doczanie do plikw wykonywalnych informacji dla programu uruchomieniowego ... 97
Tworzenie aplikacji konsolowych i aplikacji z interfejsem GUI .................................... 99
Konsolidacja automatyczna ............................................................................................ 99
Programy same tumaczce si na kod wynikowy ................................................... 99

Cz II

Programowanie w systemie Windows ...........................101

Rozdzia 6. Kodowanie tekstu w systemie Windows ........................................ 103


Kodowanie informacji tekstowych ............................................................................... 103
OEM i ANSI ................................................................................................................ 104
Unikod .......................................................................................................................... 105

Rozdzia 7. Przykady prostych programw ...................................................... 109


Wypisywanie tekstu w oknie ........................................................................................ 109
Wybieranie czcionki ..................................................................................................... 122
Grafika .......................................................................................................................... 128

Rozdzia 8. Aplikacje konsolowe ..................................................................... 139


Tworzenie konsoli ........................................................................................................ 143
Przetwarzanie zdarze klawiatury i myszy ................................................................... 147
Czasomierz w aplikacji konsolowej ............................................................................. 154

Rozdzia 9. Idea zasobw edytory i kompilatory zasobw ............................. 161


Jzyk opisu zasobw .................................................................................................... 161
Ikony ...................................................................................................................... 162
Kursory .................................................................................................................. 164
Bitmapy .................................................................................................................. 165
Cigi znakw .......................................................................................................... 165
Dialogi ................................................................................................................... 165
Menu ...................................................................................................................... 170
Klawisze skrtw ................................................................................................... 175
Niemodalne okna dialogowe ........................................................................................ 177
Kompilowanie zasobw i konsolidowanie plikw obiektowych
w pakiecie TASM32 ............................................................................................ 182

Rozdzia 10. Przykady programw korzystajcych z zasobw ............................. 185


Dynamiczne menu ........................................................................................................ 185
Klawisze szybkiego dostpu ......................................................................................... 195
Zarzdzanie listami ....................................................................................................... 201
Programowanie w stylu Windows XP .......................................................................... 207

Rozdzia 11. Praca z plikami ............................................................................. 213


Charakterystyki plikw ................................................................................................ 213
Atrybuty plikw ..................................................................................................... 214
System plikw FAT32 .................................................................................................. 217
System plikw NTFS ................................................................................................... 220
Katalogi w systemie plikw NTFS ......................................................................... 223
Kompresja plikw w systemie NTFS ..................................................................... 224

Spis treci

5
Punkty doczania .................................................................................................. 224
Wyszukiwanie plikw ............................................................................................ 225
Asemblacja programu za pomoc asemblera TASM ............................................. 240
Techniki pracy z plikami binarnymi ............................................................................. 240
Jak pobra atrybuty pliku? ..................................................................................... 251

Cz III Bardziej skomplikowane przykady programw


dla systemu Windows ..................................................255
Rozdzia 12. Dyrektywy i makroinstrukcje jzyka asemblera .............................. 257
Etykiety ........................................................................................................................ 257
Struktury ....................................................................................................................... 259
Unie .............................................................................................................................. 260
Wygodna metoda pracy ze strukturami ........................................................................ 260
Asemblacja warunkowa ................................................................................................ 261
Wywoania procedur .................................................................................................... 262
Makroinstrukcje powtrze .......................................................................................... 263
Makroinstrukcja definiowana ....................................................................................... 264
Kilka innych dyrektyw i operatorw asemblera ........................................................... 266
Konstrukcje typu HLL .................................................................................................. 267
Konstrukcje warunkowe ......................................................................................... 267
Ptla WHILE .......................................................................................................... 268
Tworzenie programw asemblowanych zarwno przez asembler MASM,
jak i asembler TASM ................................................................................................. 269

Rozdzia 13. Wicej o zarzdzaniu plikami ......................................................... 271


Dokadny opis funkcji CreateFile ................................................................................. 271
Inne moliwoci funkcji CreateFile .............................................................................. 275
Skrytki pocztowe .................................................................................................... 276
Potoki ..................................................................................................................... 281
Napdy dyskowe .................................................................................................... 282
Przegld funkcji API zajmujcych si zarzdzaniem plikami ...................................... 286
Asynchroniczne wejcie i wyjcie ................................................................................ 287

Rozdzia 14. Przykady programw korzystajcych z czasomierza ....................... 293


Najprostszy przykad uycia czasomierza .................................................................... 295
Interakcja midzy czasomierzami ................................................................................. 299
Okna dymkw pomocy ................................................................................................. 305

Rozdzia 15. Wielozadaniowo ........................................................................ 317


Tworzenie procesu ....................................................................................................... 317
Wtki ............................................................................................................................ 327
Komunikacja midzy wtkami ..................................................................................... 333
Semafory ...................................................................................................................... 334
Zdarzenia ...................................................................................................................... 336
Sekcje krytyczne .......................................................................................................... 336
Wzajemne wykluczenie ................................................................................................ 346

Rozdzia 16. Tworzenie bibliotek dynamicznych (DLL) ........................................ 347


Koncepcje oglne ......................................................................................................... 347
Tworzenie biblioteki dynamicznej ............................................................................... 349
Konsolidacja niejawna ................................................................................................. 354
Korzystanie ze wsplnej przestrzeni adresowej ........................................................... 356
Wspdzielenie pamici przez kilka procesw ............................................................. 364

Asembler. Podrcznik programisty

Rozdzia 17. Programowanie sieciowe ............................................................... 369


Urzdzenia sieciowe ..................................................................................................... 369
Wyszukiwanie i podczanie dyskw sieciowych ........................................................ 374
Sowo o protokoach sieciowych TCP/IP ..................................................................... 387
Model OSI .............................................................................................................. 387
Rodzina protokow TCP/IP .................................................................................. 387
Adresowanie w protokole IP .................................................................................. 389
Maski adresw ....................................................................................................... 391
Adresy fizyczne i adresy protokou IP ................................................................... 391
Usuga systemu nazw domen ................................................................................. 391
Automatyczne przypisywanie adresw protokou IP ............................................. 392
Routing ................................................................................................................... 392
Zarzdzanie gniazdami ................................................................................................. 393
Przykad aplikacji najprostszego serwera i klienta ....................................................... 397

Rozdzia 18. Rozwizywanie problemw zwizanych z programowaniem


w systemie Windows .................................................................... 411
Umieszczanie ikony na tacce systemowej .................................................................... 411
Przetwarzanie plikw ................................................................................................... 417
Kontrolowanie danych w polu edycyjnym ................................................................... 419
Wymiana danych pomidzy aplikacjami ...................................................................... 427
Zabezpieczenie przed wielokrotnym uruchomieniem aplikacji .................................... 433
Operacje na grupach plikw i katalogw ..................................................................... 434
Drukowanie .................................................................................................................. 436
Korzystanie z listy zada .............................................................................................. 436

Cz IV Debugowanie, analiza kodu


i przygotowywanie sterownikw ...................................443
Rozdzia 19. Programowanie systemowe ........................................................... 445
Adresowanie stron i segmentw ................................................................................... 445
Przestrze adresowa procesu ........................................................................................ 450
Zarzdzanie pamici ................................................................................................... 452
Haki .............................................................................................................................. 458

Rozdzia 20. Wykorzystywanie asemblera w jzykach wysokiego poziomu .......... 467


Koordynacja wywoa .................................................................................................. 467
Koordynacja nazw ........................................................................................................ 468
Koordynacja parametrw ............................................................................................. 469
Prosty przykad wykorzystania asemblera w jzykach wysokiego poziomu ................ 470
Borland C++ 5.0 ..................................................................................................... 470
Visual C++ 7.0 ....................................................................................................... 471
Delphi 7.0 ............................................................................................................... 473
Przekazywanie parametrw przez rejestry .................................................................... 474
Wywoania funkcji API i zasoby w moduach asemblera ............................................ 475
Poczenie jzyka C z kodem asemblerowym .............................................................. 480
Asembler wbudowany .................................................................................................. 486
Przykad wykorzystania biblioteki dynamicznej .......................................................... 488

Rozdzia 21. Programowanie usug .................................................................... 493


Podstawowe koncepcje i funkcje kontrolne .................................................................. 493
Struktura usugi ............................................................................................................ 495
Przykadowa usuga ...................................................................................................... 501

Spis treci

Rozdzia 22. Programy uruchomieniowe i deasemblery ....................................... 515


Narzdzia firmy Microsoft ........................................................................................... 515
editbin.exe .............................................................................................................. 515
dumpbin.exe ........................................................................................................... 517
Narzdzia innych producentw .................................................................................... 519
dumppe.exe ............................................................................................................ 519
hiew.exe ................................................................................................................. 519
dewin.exe ............................................................................................................... 522
IDA Pro .................................................................................................................. 522

Rozdzia 23. Wprowadzenie do programu Turbo Debugger .................................. 525


Debugowanie programw napisanych w jzykach wysokiego poziomu ...................... 529
Technika debugowania ................................................................................................. 531

Rozdzia 24. Praca z deasemblerem W32Dasm


i programem uruchomieniowym SoftIce ......................................... 533
Program uruchomieniowy W32Dasm .......................................................................... 533
Rozpoczcie pracy ................................................................................................. 533
Nawigowanie po deasemblowanym kodzie ........................................................... 535
Wywietlanie danych ............................................................................................. 536
Wypisywanie importowanych i eksportowanych funkcji ....................................... 536
Wywietlanie zasobw ........................................................................................... 537
Operacje na tekstach .............................................................................................. 537
adowanie programw do debugowania ................................................................ 538
Praca z bibliotekami dynamicznymi ...................................................................... 539
Punkty wstrzymania ............................................................................................... 539
Modyfikowanie kodu, danych i rejestrw .............................................................. 540
Dodatkowe moliwoci pracy z funkcjami API ..................................................... 541
Wyszukiwanie w programie potrzebnych lokalizacji ............................................. 541
Debuger SoftIce ............................................................................................................ 542
Instalacja ................................................................................................................ 543
adowanie programu do debugowania .................................................................. 543
Przegld polece programu uruchomieniowego .................................................... 544

Rozdzia 25. Podstawy analizy kodu .................................................................. 549


Zmienne i stae ............................................................................................................. 549
Struktury sterujce jzyka C ......................................................................................... 553
Konstrukcje warunkowe ......................................................................................... 553
Zagniedone konstrukcje warunkowe .................................................................. 554
Operator Switch ..................................................................................................... 555
Ptle ....................................................................................................................... 556
Zmienne lokalne ..................................................................................................... 557
Funkcje i procedury ................................................................................................ 559
Optymalizacja kodu ...................................................................................................... 560
Prdko albo rozmiar ............................................................................................ 562
Optymalizowanie skokw warunkowych ............................................................... 563
Optymalizowanie wywoa procedur ..................................................................... 563
Programowanie zorientowane obiektowo ..................................................................... 564

Rozdzia 26. Korygowanie moduw wykonywalnych .......................................... 569


Praktyczny przykad korygowania moduu wykonywalnego ....................................... 569
Wyszukiwanie procedury okna .................................................................................... 572

Asembler. Podrcznik programisty

Rozdzia 27. Struktura sterownikw i ich tworzenie ........................................... 575


Wirtualne sterowniki urzdze ..................................................................................... 575
Opis projektu .......................................................................................................... 577
Prosty sterownik ..................................................................................................... 581
Dynamiczne sterowniki wirtualne .......................................................................... 583
Podstawowe pojcia sterownikw trybu jdra .............................................................. 589
Jdro systemu operacyjnego i struktura pamici .................................................... 590
Kontrolowanie sterownikw .................................................................................. 591
Przykad prostego sterownika trybu jdra .............................................................. 592
Sterowniki i urzdzenia trybu jdra ........................................................................ 605

Dodatki ......................................................................................615
Bibliografia ................................................................................... 617
Skorowidz ..................................................................................... 619

Rozdzia 1.

Narzdzia
programistyczne
dla systemu Windows
W niniejszym rozdziale przedstawi krtkie wprowadzenie do kwestii zwizanych
z narzdziami wykorzystywanymi w czasie programowania w asemblerze. Rozdzia
ten przeznaczony jest dla pocztkujcych, dlatego dowiadczeni programici mog go
z czystym sumieniem pomin.
Na pocztek trzeba zauway, e tytu tego rozdziau jest nieco zwodniczy, poniewa
techniki asemblacji w systemie MS-DOS i Windows s do siebie bardzo podobne. Mimo to programowanie w systemie MS-DOS jest ju waciwie odleg przeszoci.

Pierwszy program w asemblerze


i jego przeksztacenia
Na rysunku 1.1 przedstawiono schemat przeksztace pojedynczego moduu w jzyku
asemblera.
Z etapami przeksztace przedstawionymi na rysunku 1.1 zwizane s dwa specjalne
programy: asembler1 ml.exe i konsolidator link.exe (a jeeli korzystamy z pakietu Turbo
Assembler, to odpowiednio programy tasm32.exe i tlink32.exe). Zamy, e plik rdowy z programem w jzyku asemblera nazywa si prog.asm. Bez zagbiania si

Programici praktycznie od zawsze nazywali programy tumaczce kod w jzyku asemblera


asemblerami, a nie kompilatorami.

Cz I Podstawy programowania 32-bitowego w systemach Windows

16
Rysunek 1.1.
Schemat
przeksztace
moduu
asemblerowego

w szczegy mona powiedzie, e pierwszy etap przeksztace, ktry nazywa bdziemy asemblacj lub po prostu tumaczeniem, wykonywany jest poniszym poleceniem:

   

W wyniku dziaania tego polecenia powstanie plik obiektowy prog.obj. W drugim


etapie przeksztace nazywanym konsolidacj lub czeniem, wykorzystamy go w poleceniu:


  
  

W wyniku jego dziaania otrzymamy plik wykonywalny prog.exe. Myl, e nietrudno


domyli si znaczenia opcji  oraz  programu ml.exe i opcji 
 
programu link.exe.
Pozostae opcje tych programw ze szczegami opisane bd w rozdziale 5.
Im wicej zastanawiam si nad tym dwuetapowym schematem przeksztace, tym bardziej wydaje mi si on doskonay. Format wynikowego moduu jest zaleny od systemu operacyjnego. Po okreleniu wymaga struktury moduu obiektowego uzyskujemy
nastpujce moliwoci:
 zastosowanie gotowych do uycia moduw obiektowych,
 konsolidacja programw napisanych za pomoc kilku rnych jzykw

programowania.
Jednak gwn zalet jest moliwo stosowania standardu moduw obiektowych dla
innych systemw operacyjnych. Oznacza to, e bdziemy mogli wykorzysta te moduy przygotowane w innych systemach operacyjnych2.
W celu zobrazowania procesu asemblacji i konsolidacji kodu rdowego zaprezentuj teraz kilka programw, ktre tak naprawd nie robi nic uytecznego.
Na listingu 1.1 przedstawiony zosta program Nie rb nic. Zapiszemy go w pliku
prog1.asm. Zaznaczam teraz, e we wszystkich przykadowych programach instrukcje mikroprocesora i dyrektywy asemblera pisane bd .
2

Tego rodzaju przenono ma jednak pewne ograniczenia, poniewa spore trudnoci moe sprawia
koordynacja wywoa systemowych w poszczeglnych systemach operacyjnych.

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

17

Listing 1.1. Program Nie rb nic



! Paski model pamici
"#$%& '&()* 
!-------------------------------! Segment danych
+$()( ,%-"%.)
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Teraz, wykonujc ponisze polecenia, przeksztacimy nasz program w modu wykonywalny3:


   1

  
 1 

Korzystajc jednak z pakietu Turbo Assemblera, naley zastosowa ponisze polecenia:


  1

 2 1 

Na razie prosz nie zagbia si w zbytnio w przedstawione przykady przeksztace.


Bardzo czsto wygodnym rozwizaniem jest podzielenie kodu rdowego na kilka
czci i czenie ich w pierwszym etapie przeksztace. Na taki zapis kodu rdowego programw pozwala dyrektywa . Na przykad w jednym z plikw mona
umieci kod programu, a w drugim stae i dane (takie jak definicje zmiennych)
wraz z prototypami procedur zewntrznych. Takie pliki bardzo czsto opatrywane s
rozszerzeniem .inc.
Ta metoda podziau programu przedstawiona zostaa na listingu 1.2.
Listing 1.2. Zastosowanie dyrektywy INCLUDE
! Plik CONS.INC
3#.,1 %45 1666
3#., %45 666
3#., %45 666
3#.,7 %45 7666
3#., %45 666
3#., %45 666
3#.,8 %45 8666
3#., %45 666
3#.,9 %45 9666
3#.,16 %45 16666
3

Jeeli nazwy asemblowanych i konsolidowanych moduw zawieraj w sobie spacje, to musz by one
zamknite pomidzy znakami cudzysowu:
   :; 
< :

18

Cz I Podstawy programowania 32-bitowego w systemach Windows


3#.,11 %45 11666
3#.,1 %45 1666
! Plik DAT.INC
$()1 $=#0$ 6
$() $=#0$ 6
$() $=#0$ 6
$()7 $=#0$ 6
$() $=#0$ 6
$() $=#0$ 6
$()8 $=#0$ 6
$() $=#0$ 6
$()9 $=#0$ 6
$()16 $=#0$ 6
$()11 $=#0$ 6
$()1 $=#0$ 6
! Plik progl.asm

! Paski model pamici
"#$%& '&()* 
! Doczenie pliku ze staymi
>.3&5$% 3#.,>.3
!-----------------------------------------------------!Segment danych
+$()( ,%-"%.)
! Doczenie pliku z danymi
>.3&5$% $()>.3
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
"#? %(/* 3#.,1
,@& %(/* 1 ! Mnoenie przez 2
"#? $()1* %(/
!---------------------------------- "#? %(/* 3#.,
,@& %(/*  ! Mnoenie przez 4
"#? $()* %(/
!---------------------------------- "#? %(/* 3#.,
($$ %(/* 1666 ! Dodanie wartoci 1000
"#? $()* %(/
!---------------------------------- "#? %(/* 3#.,7
($$ %(/* 666 ! Dodanie wartoci 2000
"#? $()7* %(/
!---------------------------------- "#? %(/* 3#.,
,5A %(/* 666 ! Odjcie wartoci 3000
"#? $()* %(/
!---------------------------------- "#? %(/* 3#.,
,5A %(/* 7666 ! Odjcie wartoci 4000
"#? $()* %(/
!---------------------------------- "#? %(/* 3#.,8
"#? %$/* 

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

19

>"5& %$/ ! Mnoenie przez 3


"#? $()8* %(/
!---------------------------------- "#? %(/* 3#.,
"#? %$/* 8 ! Mnoenie przez 7
>"5& %$/
"#? $()* %(/
!---------------------------------- "#? %(/* 3#.,9
"#? %A/*  ! Dzielenie przez 3
"#? %$/* 6
>$>? %A/
"#? $()9* %(/
!---------------------------------- "#? %(/* 3#.,16
"#? %A/* 8 ! Dzielenie przez 7
"#? %$/* 6
>$>? %A/
"#? $()16* %(/
!---------------------------------- "#? %(/* 3#.,11
,@0 %(/* 1 ! Dzielenie przez 2
"#? $()11* %(/
!---------------------------------- "#? %(/* 3#.,1
,@0 %(/*  ! Dzielenie przez 4
"#? $()1* %(/
!---------------------------------- 0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Podobnie jak wszystkie przykadowe programy z tego rozdziau program przedstawiony na listingu 1.2 nie ma wikszego sensu. Doskonale demonstruje jednak moliwoci, jakie udostpnia nam dyrektywa . Ponownie prosz o nieskupianie si
na wszystkich instrukcjach mikroprocesora przedstawianych w przykadach. Na razie
interesowa nas bdzie tylko instrukcja .
W naszym programie instrukcja  wykonuje operacje dzielenia parametru umieszczonego w parze rejestrw   . Wpisujc do rejestru  zero, powodujemy, e
dzielona bdzie tylko liczba zapisana w rejestrze  .
Asemblacja i konsolidacja programu wykonywane jest programami MASM lub TASM
zgodnie z podanymi wczeniej wskazwkami.
Typy danych
W niniejszej ksice najczciej bdziemy korzysta z trzech gwnych typw danych: bajtu (byte), sowa (word) i podwjnego sowa (double word). Powszechnie
stosowana jest nastpujca metoda zapisu tych typw: bajt !" lub !, sowo
# lub , podwjne sowo # lub . Wybr jednej z metod zapisu
(w jednym miejscu pisz !, a w innym !") dyktowany by chci uwypuklenia
pewnych funkcji jzyka i zrnicowania zapisu.

20

Cz I Podstawy programowania 32-bitowego w systemach Windows

Moduy obiektowe
Wyjani teraz, dlaczego w etapie konsolidacji konieczne jest doczanie innych moduw obiektowych i bibliotek. Po pierwsze, trzeba wspomnie, e niezalenie od
liczby czonych ze sob moduw, tylko jeden z nich moe by moduem gwnym.
Wynika to z bardzo prostej zasady mwicej, e moduem gwnym jest ten, od ktrego rozpoczyna si wykonywanie programu. Jest to jedyna rnica pomidzy moduem gwnym a pozostaymi. Trzeba te pamita o tym, e modu gwny w punkcie
startowym segmentu musi mie zdefiniowan etykiet $. Naley wypisa j rwnie po dyrektywie , poniewa w ten sposb informujemy asembler, eby wpisa
dane punktu wejcia programu do nagwka adowanego moduu.
Z reguy wszystkie procedury wywoywane w danym module umieszczane s w moduach doczanych dyrektyw . Przyjrzyjmy si takiemu moduowi przedstawionemu na listingu 1.3.
Listing 1.3. Modu prog2.asm przechowujcy procedur proc1 wywoywan z moduu gwnego

! Modu prog2
! Paski model pamici
"#$%& '&()* 
5A&>3 0#31
+)%/) ,%-"%.)
0#31 0#3
"#? %(/* 1666
0%)
0#31 %.$
+)%/) %.$,
%.$

Przede wszystkim prosz zauway, e po dyrektywie  nie ma adnej etykiety. Jak
wida, z pewnoci nie jest to modu gwny, ale zawarte w nim procedury bd wywoywane z innych moduw.
Innym wanym elementem, na ktry chciabym zwrci uwag, jest to, e procedura
w tym module musi zosta zadeklarowana ze sowem kluczowym %!. Nazwa tej
procedury zostanie zapisana w module obiektowym, dziki czemu bdzie mona j
czy z wywoaniami z innych moduw.
Moemy wic uruchomi nastpujce polecenie:
   

W wyniku dziaania tego polecenia powstanie modu prog2.obj.


Przeprowadzimy teraz mae ledztwo. Prosz przejrze zawarto pliku obiektowego za
pomoc najprostszej przegldarki, takiej jak wbudowana w meneder plikw Far.exe.
Zapewne bardzo szybko zauwaymy, e zamiast nazwy %#& w pliku tym zapisana
jest nazwa '%#&(). Znaki, o ktrych teraz bdzie mowa, maj bardzo due znaczenie, dlatego naley dobrze zapamita te informacje! Po pierwsze, znajdujcy si na

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

21

pocztku znak podkrelenia (') oznacza, e stosowany jest standard ANSI, ktry wymaga, aby wszystkie nazwy publiczne (w tym i nazwy udostpniane innym moduom)
byy automatycznie uzupeniane o znak podkrelenia. W tym przypadku, zaj si tym
za nas program asemblera.
Przyrostek () jest ju nieco bardziej zoony. Przede wszystkim musimy wiedzie, co
oznacza ta kombinacja znakw. Liczba podana za znakiem ( oznacza liczb bajtw,
jakie naley odoy na stos przed wywoaniem procedury. W tym przypadku asembler stwierdzi, e procedura nie wymaga podawania adnych parametrw. Taki zapis
wprowadzony zosta w ramach opisywanej dalej dyrektywy # stosowanej do wygodnego wywoywania procedur. Teraz sprbujemy przygotowa gwny modu programu o nazwie prog1.asm listing 1.4.
Listing 1.4. Modu prog1.asm wywoujcy procedur z moduu prog2.asm

! Paski model pamici
"#$%& '&()* 
!-------------------------------! Prototyp procedury zewntrznej
%/)%0. 0#31B6.%(0
! Segment danych
+$()( ,%-"%.)
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
3(&& 0#31B6
0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Jak wida, procedura wywoywana z innego moduu zadeklarowana jest z dyrektyw


 . Co wicej, nazwa tej procedury musi by uzupeniona o przyrostek opisujcy
wielko parametrw procedury, czyli nie mona poda nazwy %#&, ale nazw %#&().
Na razie nic nie mona w tym zmieni. Mog pojawi si natomiast pytania o parametr
. W systemie MS-DOS parametr ten oznacza, e wywoanie procedury (lub skok
bezwarunkowy) bdzie odbywao si wewntrz jednego segmentu. Z drugiej strony
parametr * oznacza, e wywoanie procedury (lub skok) bdzie wykonywane z innego segmentu. W systemie Windows stosowany jest tak zwany paski (Flat) model
pamici, w ktrym caa pami traktowana jest jako jeden wielki segment, dlatego naturalnym wydaje si zastosowanie parametru .
Moemy teraz wykona nastpujce polecenie:
   1

W wyniku otrzymamy modu obiektowy prog1.obj. Poczmy wic dwa przygotowane moduy, tworzc kocowy program wykonywalny o nazwie prog1.exe:

  
 1   

W czasie czenia moduw jako pierwsza musi by podana nazwa moduu gwnego,
a nazwy pozostaych moduw mona podawa za ni w dowolnej kolejnoci.

22

Cz I Podstawy programowania 32-bitowego w systemach Windows

Dyrektywa INVOKE
Przyjrzyjmy si teraz dyrektywie #. Jest to bardzo wygodne polecenie, jednak
z powodw, o ktrych powiem pniej, osobicie korzystam z niego niezwykle rzadko.
Gwna zaleta dyrektywy # polega na tym, e pozwala ona pomin z nazw procedur przyrostek (. Po drugie, dyrektywa sama zajmuje si zaadowaniem odpowiednich parametrw na stos przed wywoaniem procedury. Dziki temu nie trzeba stosowa poniszej sekwencji polece:
5,@ 1
5,@ 
5,@ 
5,@ 7
3(&& .(C=(+ 0#3%$50DB. ! N liczba bajtw do zapisania na stos

Zamiast nich wystarczy wpisa jedn dyrektyw:


>.?#E% .(C=(+ 0#3%$50D* 7* * * 1

Jako parametry mona w niej podawa rejestry, wartoci bezporednie lub adresy. Podajc adres, mona zastosowa zarwno operator #**$, jak i .
Zmodyfikujmy teraz modu prog1.asm (moduu prog2.asm nie trzeba modyfikowa)
tak, jak pokazano na listingu 1.5.
Listing 1.5. Stosowanie dyrektywy INVOKE

! Paski model pamici
"#$%& '&()* 
!-------------------------------! Prototyp procedury zewntrznej
0#31 0#)#
! Segment danych
+$()( ,%-"%.)
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
>.?#E% 0#31
0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Doskonale wida, e tym razem zewntrzna procedura deklarowana jest za pomoc


dyrektywy %##. Dyrektywa ta pozwala na atwe deklarowanie ewentualnych parametrw procedury. Na przykad zapis podobny do poniszego:
0#31 0#)# $=#0$* =#0$

oznacza, e procedura wymaga podania dwch parametrw, z ktrych pierwszy ma


dugo czterech bajtw, a drugi dwch (co daje w sumie sze bajtw i moe by
oznaczone przyrostkiem (+).

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

23

Jak ju mwiem, z dyrektywy # korzystam tylko w wyjtkowych przypadkach.


Podam teraz pierwszy z powodw takiego unikania jej stosowania jestem zdecydowanym zwolennikiem czystoci jzyka asemblerowego, w zwizku z czym nie najlepiej czuj si, stosujc w swoich programach jakiekolwiek makroinstrukcje. Uwaam
te, e pocztkujcy programici nie powinni zbyt czsto uywa makroinstrukcji
w swoich programach, poniewa w ten sposb nigdy nie bd mogli w peni doceni
pikna tego jzyka. Jest jeszcze jeden powd mojego unikania makroinstrukcji, ale
o nim opowiem nieco pniej.
Wedug schematu przedstawionego na rysunku 1.1 moliwa jest konsolidacja ze sob
rwnie innych moduw obiektowych i bibliotek. Jeeli bdziemy zmuszeni skorzysta z kilku moduw obiektowych, moe to by bardzo niewygodne. Z tego powodu
takie moduy czone s w biblioteki. Najprostsz i najwygodniejsza metod doczenia do programu danej biblioteki w asemblerze MASM jest wykorzystanie dyrektywy
!.
Dyrektywa ta zapisana zostanie w kodzie obiektowym i bdzie pniej wykorzystywana przez program link.exe.
Jak jednak tworzy si biblioteki z moduw? Do tego zadania uy naley specjalnego programu nazywanego bibliotekarzem (ang. librarian). Zamy, e chcielibymy
przygotowa bibliotek lib1.lib skadajc si z tylko jednego moduu prog2.obj.
W tym celu naley wywoa nastpujce polecenie:


1
 

Jeeli w ktrym momencie bdziemy chcieli doda do biblioteki dodatkowy modu


(modul.obj), to wystarczy wywoa ponisze polecenie:


1
  

Podam jeszcze dwa przykady, w ktrych mona zastosowa program bibliotekarza:


 ,, ,&-, polecenie to wypisuje moduy zgromadzone

w bibliotece.
 ,.
/
,-0,&-, usuwa z biblioteki lib1.lib modu

modul.obj.
Wrmy teraz do naszego przykadu. Tym razem zamiast moduu obiektowego uyjemy w programie przygotowanej przed chwil biblioteki. Na listingu 1.6 pokazano
zmodyfikowan tre programu prog1.asm.
Listing 1.6. Wykorzystanie biblioteki

! Paski model pamici
"#$%& '&()* 
!-------------------------------! Prototyp procedury zewntrznej
%/)%0. 0#31B6.%(0
!------------------------------->.3&5$%&>A &>A1&>A

24

Cz I Podstawy programowania 32-bitowego w systemach Windows


!-------------------------------! Segment danych
+$()( ,%-"%.)
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
3(&& 0#31B6
0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Dane w module obiektowym


Nadszed czas, eby przyjrze si sposobom wykorzystania danych (zmiennych) zdefiniowanych w innym module obiektowym. Po dokadnym przeczytaniu tego podrozdziau nic nie powinno stanowi ju w tym zakresie tajemnicy. Na listingach 1.7 i 1.8
przedstawione zostay moduy prog1.asm i prog2.asm bdce demonstracj wykorzystania zmiennych zewntrznych4.
Listing 1.7. Modu przechowujcy zmienn ALT wykorzystywan w module prog1.asm

! Modu prog2.asm
! Paski model pamici
"#$%& '&()* 
5A&>3 0#31
5A&>3 (&)
! Segment danych
+$()( ,%-"%.)
(&) $=#0$ 6
+$()( %.$,
+)%/) ,%-"%.)
0#31 0#3
"#? %(/* (&)
($$ %(/* 16
0%)
0#31 %.$
+)%/) %.$,
%.$

Listing 1.8. Modu wykorzystujcy zmienn ALT zdefiniowan w module prog2.asm



! Modu prog1.asm
! Paski model pamici
"#$%& '&()* 
!-------------------------------4

Termin zmienna zewntrzna stosowany bdzie tu na zasadzie analogii do terminu procedura


zewntrzna.

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

25

! Prototyp procedury zewntrznej


%/)%0. 0#31B6.%(0
! Zmienna zewntrzna
%/)%0. (&)$=#0$
! Segment danych
+$()( ,%-"%.)
+$()( %.$,
! Segment kodu
+)%/) ,%-"%.)
,)(0)
"#? (&)* 16
3(&& 0#31B6
"#? %(/* (&)
0%) ! Wyjcie
+)%/) %.$,
%.$ ,)(0)

Prosz zauway, e w przeciwiestwie do procedur zewntrznych zmienne zewntrzne


nie wymagaj stosowania przyrostka (, poniewa ich wielko jest znana z gry.

Asemblacja programem TASM


Sprbujemy teraz przetestowa dziaanie wszystkich zaprezentowanych do tej pory
programw, asemblujc je tym razem programem tasm.
Jeeli chodzi o programy przedstawione na listingach 1.1 i 1.2 to nie powinnimy mie
adnych problemw. W celu ich asemblacji i konsolidacji wystarczy wykona ponisze polecenia:
  1

 2 1 

Sprbujmy teraz przeksztaci moduy prog2.asm i prog1.asm, ktre przedstawiane


byy na listingach 1.3 i 1.4. Utworzenie moduw obiektw nie powinno nastrcza
adnych problemw, jednak przegldajc zawarto moduu prog2.obj, zauwaymy,
e nazwa procedury zewntrznej nie ma adnych przyrostkw, ale wypisana jest w najprostszej postaci 1.&. W zwizku z tym konieczna jest zmiana nazwy procedury
w module prog1.asm z %#&() na %#&. Dalsze czenie tych moduw rwnie nie
bdzie ju sprawiao adnych kopotw:

 2 1   

Do prac z bibliotekami pakiet TASM udostpnia specjalny program bibliotekarza


tlib.exe. Poniszym poleceniem utworzymy z moduu prog2.obj now bibliotek:


1
F  

W efekcie wywoania tego polecenia na dysku pojawi si plik biblioteki o nazwie lib1.
lib. Teraz moemy poczy modu prog1.obj z utworzon bibliotek:

 2 1* 1* 1*
1

26

Cz I Podstawy programowania 32-bitowego w systemach Windows

W wyniku otrzymamy modu wykonywalny prog1.exe.


Naley zwraca cis uwag na opcje wiersza polece programu tlink32. W najczciej stosowanej formie wygldaj one mniej wicej tak5:

 2 

+ * 
+G* 
+* 

+

 1,2'0 jeden lub kilka plikw obiektowych (rozdzielanych spacjami);

modu gwny musi by wpisany jako pierwszy.


 1,2'
3
plik wykonywalny.
 1,2' 41 plik .map zawierajcy informacje o strukturze moduu.
 1,2', jedna lub kilka bibliotek (rozdzielanych spacjami).

Pakiet TASM nie pozwala na stosowanie dyrektywy #, dlatego w kolejnych przykadach bd stara si jej unika6.
We wstpie do tej ksiki zadeklarowaem, e bd prbowa jednakowo opisywa oba
asemblery. Rnice pomidzy nimi skupiaj si przede wszystkim na dyrektywach
i makroinstrukcjach (co zobaczymy w rozdziale 5.), dlatego najprostszym pomysem
na uzyskanie zgodnoci programw z obydwoma asemblerami jest unikanie stosowania dyrektyw i makroinstrukcji. Podstaw programowania w systemie Windows tworz wywoania funkcji API (bdzie o nich mowa w rozdziale 2.). Jednak wiemy ju,
e asemblery rni si sposobem wywoywania zewntrznych procedur; MASM wymaga stosowania przyrostka (, a TASM obywa si bez niego. W tym zakresie nie uda
si nam, niestety, unikn stosowania definicji makroinstrukcji. O tym jednak powiemy we waciwym czasie.

Uproszczony tryb segmentacji


Zarwno asembler MASM, jak i TASM obsuguj tak zwan segmentacj uproszczon.
Osobicie wol klasyczn struktur programw w jzyku asemblera, ale musz przyzna, e uproszczona segmentacja jest metod bardzo wygodn, szczeglnie w czasie
programowania dla systemu Windows.
Segmentacja uproszczona polega na tym, e punkt pocztkowy segmentu kodu oznaczany jest dyrektyw -#, natomiast dyrektywa -7 oznacza pocztek segmentu
danych. Obie dyrektywy mog pojawia si wewntrz programu wielokrotnie, a program asemblera odpowiednio poskada ze sob poszczeglne segmenty kodu i danych.
Gwnym zadaniem tego rozwizania jest umoliwienie umieszczania w kodzie rdowym danych moliwie najbliej miejsca ich wykorzystania w kodzie programu. Po5
6
7

Zaznaczam, e jest to forma nieco uproszczona.


Poza tym uwaam, e najlepszym rozwizaniem jest rczne adowanie parametrw na stos.
Dostpna jest te specjalna dyrektywa opisujca segment stosu ,)(3E. Osobicie uywam
jej jednak wyjtkowo rzadko.

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

27

dobne rozwizanie zostao swego czasu wprowadzone rwnie w jzyku C++. Wedug
mnie powoduje to jednak znaczce trudnoci w czasie czytania kodu takiego programu. Poza tym nie chciabym uchodzi za przesadnego estet, ale nie podoba mi si
program, w ktrym dane i kod s dowolnie przemieszane ze sob.
Na listingu 1.9 przedstawiono sposb uycia trybu uproszczonej segmentacji.
Listing 1.9. Program korzystajcy z segmentacji uproszczonej

! Paski model pamici
"#$%& '&()* 
!-------------------------------! Segment danych
$()(
,5" $=#0$ 6
! Segment kodu
3#$%
,)(0)
! Segment danych
$()(
( $=#0$ 166
! Segment kodu
3#$%
"#? %(/* (
! Segment danych
$()(
A $=#0$ 66
! Segment kodu
3#$%
($$ %(/* A
"#? ,5"* %(/
0%) ! Wyjcie
%.$ ,)(0)

Dyrektywy w rodzaju - i -# mona umieszcza w tradycyjnie zdefiniowanym


segmencie kodu. Jest to wygodna metoda tworzenia przydatnych makroinstrukcji,
ktre bd opisywane w rozdziale 12.

Inne narzdzia
uywane do pracy z asemblerem
Na zakoczenie tego rozdziau przedstawiam krtki opis innych programw czsto uywanych w czasie programowania w jzyku asemblera. Pniej cz z tych programw
bdzie opisywana dokadniej, a o pozostaych w ogle nie bdziemy ju wspomina.

Cz I Podstawy programowania 32-bitowego w systemach Windows

28

Edytory
Osobicie w czasie pisania programw asemblerowych nie uywam adnego specjalizowanego edytora, ale chc, aby opisy w tej ksice byy pene, dlatego wspomn tutaj
o dwch takich narzdziach. Na pocztek zajmiemy si edytorem qeditor.exe dostarczanym w pakiecie asemblera MASM. Sam edytor, a take towarzyszce mu narzdzia, zosta napisany w asemblerze. Ju pobiena analiza moliwoci edytora i jego
rozmiaru moe budzi uznanie. Jako przykad podam, e sam edytor ma tylko 27 kB,
a narzdzie do przegldania raportw i wynikw przeksztace programw 6 kB.
Edytor ten doskonale nadaje si do pracy z niewielkimi aplikacjami mieszczcymi si
w pojedynczych moduach. Nie pozwala jednak na wygodn prac z kilkoma moduami. Dziaanie edytora opiera si na interakcji kilku narzdzi poczonych ze sob plikami wsadowymi. Na przykad przeksztacenia programw przeprowadzane s przez
plik wsadowy assmbl.bat, ktry odpowiednio wywouje asembler ml.exe, a wyniki jego dziaania zapisuje do pliku asmbl.txt. Do przejrzenia zawartoci tego pliku konieczne jest uycie programu thegun.exe. Konsolidacja moduw programu wykonywana
jest w podobny sposb.
Narzdzie dumppe.exe stosowane jest do deasemblowania moduw wykonywalnych,
a wyniki tej operacji zapisywane s do pliku disasm.txt. Pozostae operacje wykonywane s w podobny sposb. Wprowadzajc zmiany do poszczeglnych plikw wsadowych,
mona modyfikowa zachowania poszczeglnych narzdzi, a w razie koniecznoci
mona nawet zamieni niektre z uywanych narzdzi (na przykad zamiast programu
ml.exe zastosowa program tasm32.exe).
Drugim edytorem, na ktry chciabym wskaza, jest program eas.exe (Easy Assembler
Shell prosta powoka asemblera). Edytor ten, lub, jak wskazuje jego nazwa, powoka, pozwala na tworzenie, asemblowanie i konsolidowanie zoonych projektw
skadajcych si z plikw .asm, .obj, .rc, .res i .def. Program ten moe wsppracowa
z asemblerem TASM i MASM, a take z innymi narzdziami, takimi jak programy
uruchomieniowe, edytory zasobw itd. Wsppraca z asemblerami i konsolidatorami
moe by przygotowana dziki opcjom tej powoki pozwalajcym na wprowadzenie
opcji wiersza polece dla stosowanego narzdzia.

Programy uruchomieniowe
Programy uruchomieniowe zwane czsto take debugerami (ang. debuggers) pozwalaj na wykonywanie programw w trybie krok-po-kroku. W czwartej czci ksiki
opisywa bd dokadniej programy uruchomieniowe i deasemblery. Do najpopularniejszych programw uruchomieniowych8 na rynku nale CodeView firmy Microsoft,
Turbo Debugger firmy Borland oraz program Ice9.
8

Razem z systemem Windows dostarczany jest nadal debuger debug.exe, jednak program ten nie
obsuguje najnowszego formatu plikw wykonywalnych.
Obecnie firma Microsoft udostpnia na swoich stronach internetowych bardzo dobry program
uruchomieniowy WinDbg, ktry przeznaczony jest do pracy pod systemem operacyjnym Windows.
Bardzo przyjazny jest z kolei OllyDbg dostpny na stronie autora tego bardzo dobrego programu
uruchomieniowego przyp. red.

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

29

Deasemblery
Deasemblery konwertuj moduy wykonywalne na kod asemblerowy. Przykadem najprostszego deasemblera moe by program dumppe.exe uruchamiany z poziomu wiersza polece. Na listingu 1.10 przedstawiono przykad wydruku przygotowanego przez
program dumppe.exe. Wydruk ten jest wynikiem deasemblowania programu przedstawionego na listingu 1.4. Raczej trudno byoby go rozpozna
Listing 1.10. Wynik deasemblowania programu wykonanego przez program dumppe.exe
 1G HIGJ HJ
%/% 
< H J 796 11
"

  
< H J 76 1167
#K    6 6
>

 3,> 66666666
>

 ,,, 666666A 17
"

  
 HJ 6 6
"G
  
 HJ '''' 
@ 
< HJ 7 7
0 
    76 7
0 
  
 6 6
  G    
,
  666676 H %J
"I
 6 73 H>  J
,
  6661
)
   (%$1A1 = (  1919 661
,    66666666
.      66666666
#
  I 
< 66%6
3I

 616'
0 


 

%G 

&
   

&    

2
  I

"
 616A
&
 K
 1
,
<  3 6666666
,
< 



<  66666666
,
<  



<  66666666
(    
 66661666
A   66661666
A   6666666
>  66766666
,
 
   66661666
'
 
   6666666
#
  K
 766
> K
 666
,  K
 766
0K 66666666
> 
< 6666666
@ 
< 6666666
3I 66666666
,  666 H=
J

30

Cz I Podstawy programowania 32-bitowego w systemach Windows


$&& I

 6666
,
<   K 66166666
,
<   
 66661666
,
<  I K 66166666
,
<  I 
 66661666
&   66666666
.   

 66666616
$
  ?
( ?
,
<
222222222222222222222222222222 L2222222222 L2222222
%G 66666666 66666666
> 66666666 66666666
0 66666666 66666666
%G
 66666666 66666666
,
 66666666 66666666
A  
 66666666 66666666
$  66666666 66666666
$

 I
 66666666 66666666
"I
 K  H"> , - J 66666666 66666666
)I  66666666 66666666
&  

 66666666 66666666
A 
 66666666 66666666
>    66666666 66666666
$ 
 66666666 66666666
3#"  
 
 66666666 66666666
HKJ 66666666 66666666
,
  
2222222222222
?
  6661666
?
 
< 66666%
0   66666
0  
< 666666
0 
  666666
0 
   666
&
    6666666
&
     666
3I

 666666
3
%G 
 
$
 
66761666 
66761666 %6666666   +6676166
6676166 3 
6676166 33
 
66761668 33
 
6676166  +6676166
6676166 A%66666 K G*%I
6676166$ 3 

Chciabym te wspomnie o deasemblerze W32Dasm, ktry opisz ze szczegami


w ostatniej czci ksiki, a take doskonale znanym deasemblerze Ida Pro. W czci
czwartej przyjrzymy si tym programom dokadniej i omwimy techniki skutecznego
ich wykorzystania.

Rozdzia 1. Narzdzia programistyczne dla systemu Windows

31

Edytory szesnastkowe
Edytory szesnastkowe pozwalaj na przegldanie i edytowanie moduw wykonywalnych w formacie szesnastkowym. Tego rodzaju edytory wbudowane s w wikszo
popularnych programw uruchomieniowych i deasemblerw. Wspomn tutaj tylko
o programie hiew.exe, bardzo popularnym w rodowiskach hakerw. Program ten
pozwala na przegldanie zawartoci moduw wykonywalnych zarwno w formacie
szesnastkowym, jak i w kodzie asemblerowym. Dodatkowo, oprcz moliwoci przegldania plikw wykonywalnych, program ten pozwala rwnie na ich edycj.

Kompilatory zasobw
Oba pakiety, MASM i TASM, dostarczane s z kompilatorami zasobw, ktre bd
opisywa w rozdziale 9. Programy te nazywaj si odpowiednio rc.exe i brc32.exe.

Edytory zasobw
Najczciej korzystam z edytora zasobw doczanego do pakietu Borland C++ 5.0
albo pochodzcego z pakietu Visual Studio.NET, jednak proste zasoby mona tworzy
przy pomocy waciwie dowolnego edytora tekstowego. Jzyk zasobw omawia bd w rozdziaach 9. i 10.

Vous aimerez peut-être aussi