134 92 10MB
Polish Pages [206] Year 2012
Poznaj A sem blera i do łącz do elity program istów D o w ie d z się, ja k je st z b u d o w a n y i ja k d z iała p ro c e s o r Po z n a j ję z y k A se m b le r i n a rz ę d z ia u m o ż liw ia ją c e tw o rz e n ie w nim p ro g ra m ó w N a u c z s ię p is a ć w y d a jn y k o d d z ia ła ją c y w s y s te m a c h D O S i W in d o w s
D A W ID F A R B A N I E C
551. £
Spis treści
1.
2.
3.
4.
5.
Podstawowe informacje
7
1.1. Słowem wstępu 1.2. Architektura x86 — podstawowe informacje 1.3. Budowa programu dla podsystemu DOS (16-bitowego) 1.4. Budowa programu dla systemu Windows (32-bitowego)
7 10 13 15
Podstawowe instrukcje procesora
18
2.1. Instrukcja kopiowania i instrukcje arytmetyczne 2.2. Instrukcje logiczne i przesunięć bitowych 2.3. Instrukcje wywołania procedury i powrotu 2.4. Instrukcja porównania i instrukcje skoku 2.5. Instrukcje do operacji na łańcuchach znaków
18 20 26 29 30
M akroinstrukcje
35
3.1. Makroinstrukcje kontroli przepływu 3.2. Makroinstrukcje do tworzenia pętli
35 36
Praca z danymi
39
4.1. Adresowanie i wskaźniki 4.2. Zmienne i stałe 4.3. Praca ze strukturami
39 41 42
Programowanie w systemie W indows
45
5.1. Konsola w systemie Windows 5.2. Proste okno dialogowe 5.3. Odczyt myszki i klawiatury 5.4. Operacje na plikach i alokacja bloków pamięci 5.5. Tworzenie menu 5.6. Kontrolka przycisku (Button) 5.7. Kontrolka pola tekstowego (Edit) 5.8. Kontrolka wielokrotnego wyboru (CheckBox)
45 47 51 52 55 56 57 60
3
5.9. Kontrolka pojedynczego wyboru (RadioButton) 5.10. Kontrolka listy rozwijanej (ComboBox) 5.11. Kontrolka listy (ListBox) 5.12. Kontrolka paska postępu (ProgressBar) 5.13. Kontrolka widoku drzewa (TreeView) 5.14. Kontrolka widoku listy (ListView) 5.15. Kontrolka suwaka (TrackBar) 5.16. Kontrolka podpowiedzi (Tooltip) 5.17. Kontrolka do wprowadzania adresu IP (IPAddress) 5.18. Kontrolka tekstu o bogatym formatowaniu (RichEdit) 5.19. Kontrolki w nowym stylu (pliki .manifest) 5.20. Podpięcia do systemu Windows (Hooks) 5.21. Ekran powitalny (Splashscreen) 5.22. Ikona w zasobniku systemowym (Tray) 5.23. Podmiana procedury obsługi okna 5.24. Programowanie aplikacji wielowątkowych 5.25. Tworzenie bibliotek DLL 5.26. Pliki odwzorowane w pamięci 5.27. Pobieranie adresu IP lokalnego komputera 6.
7.
8.
4
|
62 62 64 65 66 68 70 71 78 83 85 87 89 91 93 95 97 99 99
Dodatkowe zestaw y instrukcji
102
6.1. Korzystanie z instrukcji koprocesora (FPU) 6.2. Korzystanie z rozszerzeń MMX i SSE 6.3. Nowe rozszerzenie —Advanced Vector Extensions (AVX)
102 110 118
Asembler 64 -bitow y (x86-64)
120
7.1. Wstęp do Asemblera dla architektury 64-bitowej
120
Opis rozkazów procesorów z rodziny 80x86
125
8.1. Instrukcje na literę A 8.2. Instrukcje na literę B 8.3. Instrukcje na literę C 8.4. Instrukcje na literę D 8.5. Instrukcje na literę E 8.6. Instrukcje na literę H 8.7. Instrukcje na literę I 8.8. Instrukcje na literę J 8.9. Instrukcje na literę L 8.10. Instrukcje na literę M 8.11. Instrukcje na literę N
125 128 132 137 139 139 140 143 144 148 151
Asembler. Leksykon k eszonkowy
8.12. 8.13. 8.14. 8.15. 8.16. 8.17. 8.18. 8.19. 9.
Instrukcje na literę O Instrukcje na literę P Instrukcje na literę R Instrukcje na literę S Instrukcje na literę T Instrukcje na literę V Instrukcje na literę W Instrukcje na literę X
152 154 156 160 168 169 169 170
Dyrektywy asemblera M A SM
172
9.1. Etykiety kodu 9.2. Warunkowa kontrola przepływu 9.3. Alokacja danych 9.4. Przyrównania 9.5. Makra 9.6. Procedury 9.7. Rodzaj zestawu instrukcji procesora 9.8. Bloki powtórzeń 9.9. Zakres 9.10. Segmenty 9.11. Uproszczone segmenty 9.12. Łańcuchy znaków 9.13. Struktury i rekordy 9.14. Różne
172 173 175 177 177 178 179 182 183 184 185 187 188 189
Dodatki
192
A.
Tablica kodów ASCII
192
B.
Potęgi liczby dw a
193
C.
Lista opkodów procesora 80x86
196
Skorow idz
202
Sp s treśc
|
5
6
j
Asem bler. Leksykon k eszonkow y
Rozdział 1. Podstawowe informacje 1.1. Słowem wstępu Witaj! Zapraszam do lektury leksykonu języka Asembler. N iektórzy z pewnością się zastanawiają, dlaczego warto poznać właśnie Asembler. M ówi się, że program y pisane w tym języku są znane z tego, iż są m ałe i szybkie. I rzeczywiście takie właśnie są, a to dlatego, że m ają taki kod, jaki m y sami stworzym y, a nie taki, jaki zostanie przetłu maczony przez kompilator. Co ważne, nie posiadają również zbędnych bibliotek. Na jednym z wykładów z programowania niskopoziomowego usłyszałem kiedyś istotną uwagę: programista piszący w językach wysokiego poziomu żyje w swoim własnym świecie i nie ma pojęcia, co się tak naprawdę dzieje w środku. Dzięki programowaniu w Asemblerze m ożem y zrozumieć, jak działa procesor czy jak jest zbudow any pro gram, i nauczyć się w y k orzy sty w ać jeszcze inne aspekty niskopoziom owego program owania, o których program ista zajm ujący się je dynie pisaniem na przykład w Javie nie m a w ogóle pojęcia. Dlatego każdy szanujący się programista powinien poznać przynajmniej pod stawy Asemblera.
Podstawowe pojęcia Asem bler (wielką literą) — niskopoziom ow y język programowania. asem bler (małą literą) — program przeprow adzający proces asemblacji, po którym otrzym ujem y plik *.obj. Konsolidator (ang. linker) — program , który po przeprow ad zeniu wcześniejszej asemblacji dokonuje konsolidacji, czyli łączenia. W wyni ku jego działania otrzym ujem y plik w ykonyw alny *.exe. Odpluskwiacz (ang. debugger) — program do w yszukiw ania błędów w programach. Przedstaw ia kod program u w Asem blerze i pozwala w ykonyw ać go instrukcja po instru k cji, co u łatw ia analizę aplikacji i w ykryw anie błędów.
7
Potrzebne narzędzia Podczas pisania leksykonu używałem asemblera MASM, który można pobrać za darmo ze strony http://masm32.com/, oraz środow iska pro gram istycznego W inAsm , które również jest dostępne bezpłatnie na stronie http://w inasm .net/. Do szukania błędów i analizy naszych pro gramów m oże się przydać debugger — ja polecam Olly Debugger (http://ollydbg.de/). N a początku należy zainstalow ać pakiet M ASM 32, następnie środo wisko W inAsm (przy czym kolejność jest tu istotna), a później można jeszcze doinstalow ać w ym ieniony wcześniej Olly Debugger. W ażne jest, aby w środowisku W inAsm odpowiednio ustawić ścieżki. Aby to zrobić, n ależy w y b rać w górnym m enu Tools/Options/Files & Paths. Przykładow e ścieżki przedstawiam na rysunku 1.1.
Options General [ Files & Paths pEditor
Intellisense | KeyWords
Binary Path
V*1asm32^in
Indude Path
yiasm32\[ndude
Library Path
Wasm32\Jb
Keyword File
^WinASM\>24) & 0 x ff ) ((a>>16) & 0 x ff) ((a>>8) & 0 x ff) (a & 0 x ff )
N a powyższym listingu w idać zdefiniow ane makra, które m ożemy łatwo przepisać na Asembler:
78
|
Asembler. Leksykon k eszonkowy
.d a ta dwAddr dword 0 F i r s t dword 0 Second dword 0 T h ird dword 0 Fo urth dword 0 .d a ta ? s t r F i r s t db ? strSe co n d db ? s t r T h ir d db ? s tr F o u r th db ? (...)
; p ierw sza część adresu IP mov eax, dwAddr s h r eax, 24 mov [ F i r s t ] , eax invo ke dwtoa, eax, addr s t r F i r s t
; druga część adresu IP mov eax, dwAddr s h r eax, 16 and eax, 255 mov [S e c o n d ], eax invo ke dwtoa, eax, addr strSe co n d
; trzecia część adresu IP mov eax, dwAddr s h r eax, 8 and eax, 255 mov [ T h i r d ] , eax invo ke dwtoa, eax, addr s t r T h ir d
; czw arta część adresu IP mov eax, dwAddr and eax, 255 mov [ F o u r t h ] , eax invo ke dwtoa, eax, addr s tr F o u r th
Krótko mówiąc, do rejestru EAX kopiujemy wartość DWORD z adresem IP (dwAddr). Następnie wykonujemy odpowiednie operacje. Potem kopiu jemy zm ienioną w artość z EAX do zmiennej DWORD. W reszcie, za pom o cą funkcji dwtoa, zam ieniam y przekształconą w artość w rejestrze EAX na tekst i kopiujem y do zmiennej. Teraz w zm iennych F irst, Second, Third i Fourth m am y poszczególne części adresu IP w postaci liczby, a w zm iennych s trF irs t, strSecond, strThird i strFourth znajdują się poszczególne części adresu IP jako tekst.
Rozdz ał 5. Programowan e w system e W ndows
|
79
Ustawianie nowego adresu IP w kontrolce Do tej czynności posłuży nam kom unikat IPM_SETADDRESS. N ajpierw jednak m usim y w jakiś sposób połączyć poszczególne części adresu IP i zapisać je jako w artość typu DWORD (czynność odw rotna do om ó wionej powyżej). W plikach nagłów kow ych C + + m ożem y znaleźć zadeklarow ane makro: # d e fin e MAKEIPADDRESS(b1, b2, b3, b4) ( (LPARAM)( ((DWORD)(b1)