Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00052 008660 10442594 na godz. na dobę w sumie
Hack Wars. Tom 1. Na tropie hakerów - książka
Hack Wars. Tom 1. Na tropie hakerów - książka
Autor: Liczba stron: 736
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-599-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> hacking >> klasyka hakera
Porównaj ceny (książka, ebook, audiobook).
Ekspert w dziedzinie zabezpieczeń, John Chirillo, zachęca Czytelnika do poznania mrocznego i tajemniczego świata hakerów. Czerpiąc z bogatego doświadczenia we współpracy z firmami Fortune 1000, Chirillo przedstawia różne sposoby wykorzystania przez hakerów luk w zabezpieczeniach sieci oraz metody rozpoznawania tego rodzaju zagrożeń. Uzupełnieniem jest szczegółowy opis pakietu TigerBox, umożliwiającego hakerom przeprowadzanie skutecznych włamań, a administratorowi sieci -- zyskanie pewności, że jest właściwie chroniona.

W tej prowokacyjnej książce znajdziemy:

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TRE(cid:140)CI SPIS TRE(cid:140)CI KATALOG KSI¥flEK KATALOG KSI¥flEK KATALOG ONLINE KATALOG ONLINE ZAM(cid:211)W DRUKOWANY KATALOG ZAM(cid:211)W DRUKOWANY KATALOG TW(cid:211)J KOSZYK TW(cid:211)J KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAM(cid:211)W INFORMACJE ZAM(cid:211)W INFORMACJE O NOWO(cid:140)CIACH O NOWO(cid:140)CIACH ZAM(cid:211)W CENNIK ZAM(cid:211)W CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥flEK ONLINE FRAGMENTY KSI¥flEK ONLINE Hack Wars. Tom 1. Na tropie hacker(cid:243)w Autor: John Chirillo T‡umaczenie: Pawe‡ Koronkiewicz, Leonard Milcin ISBN: 83-7197-599-6 Tytu‡ orygina‡u: Reference with Custom Security Hacking Toolkit Format: B5, stron: 736 Zawiera CD-ROM Hack Attacks Revealed: A Complete Ekspert w dziedzinie zabezpieczeæ, John Chirillo, zachŒca Czytelnika do poznania mrocznego i tajemniczego (cid:156)wiata haker(cid:243)w. Czerpi„c z bogatego do(cid:156)wiadczenia we wsp(cid:243)‡pracy z firmami Fortune 1000, Chirillo przedstawia r(cid:243)¿ne sposoby wykorzystania przez haker(cid:243)w luk w zabezpieczeniach sieci oraz metody rozpoznawania tego rodzaju zagro¿eæ. Uzupe‡nieniem jest szczeg(cid:243)‡owy opis pakietu TigerBox, umo¿liwiaj„cego hakerom przeprowadzanie skutecznych w‡amaæ, a administratorowi sieci (cid:151) zyskanie pewno(cid:156)ci, ¿e jest w‡a(cid:156)ciwie chroniona. W tej prowokacyjnej ksi„¿ce znajdziemy: Opis protoko‡(cid:243)w sieciowych i technologii komunikacyjnych z punktu widzenia hakera Pe‡ny opis stosowanych metod w‡amaæ, wyja(cid:156)niaj„cy, jak dzia‡aj„ hakerzy, crackerzy, (cid:132)phreaks(cid:148) i cyberpunki NarzŒdzia do gromadzenia informacji i skanowania sieci, umo¿liwiaj„ce wykrycie i przeanalizowanie przypadk(cid:243)w naruszenia bezpieczeæstwa systemu Dok‡adne instrukcje, jak pos‡ugiwa(cid:230) siŒ pakietem typu TigerBox i(cid:160) wykorzystywa(cid:230) go do wykrywania atak(cid:243)w Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl O Autorze ...............................................................................................................9 Wstęp ..................................................................................................................11 Rozdział 1. Protokoły komunikacyjne ..................................................................15 Krótka historia Internetu ...................................................s................................................15 IP — Internet Protocol ...................................................s.............................................16 Datagramy IP — transportowanie, rozmiar i fragmentacja ........................................18 Adresy IP, klasy i maski podsieci ...................................................s............................21 VLSM — krótka instrukcja tworzenia podsieci i odczytywania adresu IP ................22 ARP/RARP — rozpoznawanie adresu sprzętowego...................................................s......31 ARP — transportowanie, budowa nagłówka pakietu .................................................31 RARP — transportowanie, dokonywanie transakcji ..................................................33 Usługa RARP...................................................s...................................................s........33 TCP — Transmission Control Protocol ...................................................s.........................33 Sekwencje oraz okna...................................................s................................................34 Budowa nagłówka pakietu TCP...................................................s...............................35 Porty, końcówki, nawiązywanie połączenia ...................................................s............37 UDP — User Datagram Protocol ...................................................s...................................37 Budowa i transportowanie datagramów UDP...................................................s..........38 Multiplexing, demultiplexing oraz porty UDP ...................................................s........39 ICMP — Internet Control Message Protocol...................................................s.................39 Budowa i transportowanie pakietów ICMP ...................................................s.............39 Komunikaty ICMP, wyszukiwanie maski podsieci ...................................................s.40 Przykłady datagramów ICMP...................................................s..................................42 Rozdział 2. NetWare oraz NetBIOS ......................................................................43 NetWare — wprowadzenie ...................................................s............................................43 IPX — Internetwork Packet Exchange ...................................................s....................44 SPX — Sequenced Packet Exchange ...................................................s......................48 Budowa i przykłady nagłówków SPX ...................................................s.....................49 Zarządzanie połączeniami, przerywanie ...................................................s..................49 Algorytm Watchdog...................................................s.................................................50 Korekcja błędów, ochrona przed zatorami ...................................................s..............51 NetBIOS — wprowadzenie...................................................s............................................51 Konwencje nazywania, przykładowe nagłówki...................................................s.......51 Usługi NetBIOS ...................................................s...................................................s....52 4 Hack Wars. Na tropie hakerów NetBEUI — wprowadzenie ...................................................s...........................................53 Związki z NetBIOS...................................................s..................................................54 Okna i liczniki...................................................s...................................................s.......54 Rozdział 3. Porty standardowe oraz związane z nimi usługi..................................55 Przegląd portów...................................................s...................................................s...........55 Porty TCP oraz UDP...................................................s................................................56 Luki w bezpieczeństwie związane z portami standardowymi ....................................57 Niezidentyfikowane usługi...................................................s.............................................69 Rozdział 4. Techniki rozpoznania i skanowania ....................................................99 Rozpoznanie ...................................................s...................................................s................99 Katalog Whois ...................................................s...................................................s....100 PING ...................................................s...................................................s...................102 Serwisy wyszukiwawcze ...................................................s.......................................105 Social Engineering ...................................................s.................................................106 Skanowanie portów ...................................................s...................................................s...107 Techniki skanowania portów ...................................................s.................................107 Popularne skanery portów...................................................s......................................108 Przykładowy skan ...................................................s...................................................s.....120 Rozdział 5. Niezbędnik hakera...........................................................................127 Pojęcia związane z siecią ...................................................s.............................................127 Model warstwowy — Open Systems Interconnection Model ..................................127 Rodzaje okablowania — przepustowość oraz maksymalna długość........................129 Konwersje pomiędzy postaciami dwójkowymi, dziesiątkowymis i szesnastkowymi liczb ...................................................s....................................129 Funkcje wydajnościowe protokołów ...................................................s.....................140 Technologie sieciowe ...................................................s...................................................s141 Adresowanie MAC i kody producentów ...................................................s...............141 Ethernet ...................................................s...................................................s...............141 Token Ring...................................................s...................................................s..........148 Sieci Token Ring i mostkowanie trasy nadawcy ...................................................s...149 Sieci Token Ring i translacyjne mostkowanie trasy nadawcy..................................153 Sieci FDDI ...................................................s...................................................s..........155 Protokoły wybierania tras...................................................s.............................................157 Protokoły wektorowo-odległościowe i protokoły stanów przyłączy........................157 Protokół RIP...................................................s...................................................s........159 Protokół IGRP...................................................s...................................................s.....160 Protokół RTMP sieci Appletalk...................................................s.............................161 Protokół OSPF ...................................................s...................................................s....161 Ważne polecenia ...................................................s...................................................s.......162 append ...................................................s...................................................s.................162 assign...................................................s...................................................s...................164 attrib ...................................................s...................................................s....................164 backup ...................................................s...................................................s.................165 break...................................................s...................................................s....................166 chcp ...................................................s...................................................s.....................166 chdir (cd) ...................................................s...................................................s.............167 chkdsk ...................................................s...................................................s.................168 cls ...................................................s...................................................s........................168 command...................................................s...................................................s.............168 comp...................................................s...................................................s....................169 copy...................................................s...................................................s.....................170 ctty...................................................s...................................................s.......................171 Spis treści 5 date ...................................................s...................................................s......................171 del (erase)...................................................s...................................................s............172 dir ...................................................s...................................................s........................172 diskcomp ...................................................s...................................................s.............173 diskcopy ...................................................s...................................................s..............174 exe2bin ...................................................s...................................................s................174 exit...................................................s...................................................s.......................175 fastopen ...................................................s...................................................s...............175 fc ...................................................s...................................................s.........................175 fdisk...................................................s...................................................s.....................177 find ...................................................s...................................................s......................177 format ...................................................s...................................................s..................178 graftabl ...................................................s...................................................s................179 Graphics ...................................................s...................................................s..............179 join ...................................................s...................................................s......................180 keyb...................................................s...................................................s.....................181 label...................................................s...................................................s.....................182 mkdir (md) ...................................................s...................................................s..........182 mode...................................................s...................................................s....................183 more ...................................................s...................................................s....................186 nlsfunc...................................................s...................................................s.................186 path...................................................s...................................................s......................187 print ...................................................s...................................................s.....................187 prompt ...................................................s...................................................s.................188 recover...................................................s...................................................s.................189 rename (ren) ...................................................s...................................................s........190 replace ...................................................s...................................................s.................190 restore...................................................s...................................................s..................191 rmdir (rd)...................................................s...................................................s.............192 select ...................................................s...................................................s...................192 set ...................................................s...................................................s........................193 share ...................................................s...................................................s....................194 sort...................................................s...................................................s.......................194 subst ...................................................s...................................................s....................195 sys ...................................................s...................................................s.......................196 time ...................................................s...................................................s.....................196 tree...................................................s...................................................s.......................197 type...................................................s...................................................s......................197 ver ...................................................s...................................................s.......................197 verify ...................................................s...................................................s...................198 vol ...................................................s...................................................s.......................198 xcopy...................................................s...................................................s...................198 Rozdział 6. Podstawy programowania dla hakerów ...........................................201 Język C ...................................................s...................................................s......................201 Wersje języka C ...................................................s...................................................s..202 Klasyfikowanie języka C ...................................................s.......................................203 Struktura języka C ...................................................s...................................................s.....203 Komentarze ...................................................s...................................................s.........205 Biblioteki...................................................s...................................................s.............205 Tworzenie programów ...................................................s.................................................205 Kompilacja ...................................................s...................................................s..........205 Typy danych...................................................s...................................................s........206 Operatory ...................................................s...................................................s............210 6 Hack Wars. Na tropie hakerów Funkcje...................................................s...................................................s................212 Polecenia preprocesora C...................................................s.......................................216 Instrukcje sterujące ...................................................s................................................219 Wejście-wyjście ...................................................s...................................................s..223 Wskaźniki ...................................................s...................................................s...........226 Struktury ...................................................s...................................................s.............229 Operacje na plikach...................................................s................................................234 Ciągi ...................................................s...................................................s....................244 Obsługa tekstu...................................................s...................................................s.....250 Data i godzina ...................................................s...................................................s.....253 Pliki nagłówkowe...................................................s...................................................s259 Debugowanie programu...................................................s.........................................259 Błędy wartości zmiennoprzecinkowych ...................................................s................260 Obsługa błędów ...................................................s...................................................s..260 Konwersja typów zmiennych...................................................s.................................263 Prototypy...................................................s...................................................s.............265 Wskaźniki do funkcji ...................................................s.............................................266 Sizeof ...................................................s...................................................s..................267 Przerwania...................................................s...................................................s...........267 Funkcja signal() ...................................................s...................................................s..270 Dynamiczne alokowanie pamięci ...................................................s..........................271 Funkcja atexit() ...................................................s...................................................s...273 Wydajność...................................................s...................................................s...........274 Przeszukiwanie katalogów...................................................s.....................................275 Dostęp do pamięci rozbudowanej ...................................................s..........................278 Dostęp do pamięci rozszerzonej ...................................................s............................282 Tworzenie programów TSR...................................................s...................................290 Rozdział 7. Metody przeprowadzania ataków .....................................................319 Streszczenie przypadku ...................................................s................................................319 „Tylne wejścia” (backdoors) ...................................................s........................................320 Zakładanie „tylnego wejścia” ...................................................s................................322 Typowe techniki „tylnego wejścia” ...................................................s.............................323 Filtry pakietów ...................................................s...................................................s....323 Filtry stanowe...................................................s...................................................s......328 Bramy proxy i poziomu aplikacji ...................................................s..........................333 Przeciążanie (flooding) ...................................................s................................................333 Zacieranie śladów (log bashing) ...................................................s..................................342 Zacieranie śladów aktywności online ...................................................s....................343 Unikanie rejestrowania wciśnięć klawiszy ...................................................s............344 Bomby pocztowe, spam i podrabianie korespondencji ...................................................s355 Łamanie haseł (password cracking) ...................................................s.............................357 Deszyfrowanie i krakowanie...................................................s..................................357 Zdalne przejęcie kontroli...................................................s..............................................362 Krok 1. Rozpoznanie ...................................................s.............................................363 Krok 2. Przyjazna wiadomość email ...................................................s.....................363 Krok 3. Kolejna ofiara ...................................................s...........................................364 Monitorowanie komunikacji (sniffing) ...................................................s........................366 Podrabianie IP i DNS (spoofing) ...................................................s.................................374 Studium przypadku ...................................................s................................................375 Konie trojańskie ...................................................s...................................................s........382 Infekcje wirusowe ...................................................s...................................................s.....388 Wardialing ...................................................s...................................................s.................391 „Złamanie” strony WWW (Web page hack)...................................................s................392 Spis treści 7 Krok 1. Rozpoznanie ...................................................s.............................................394 Krok 2. Uszczegółowienie danych ...................................................s........................394 Krok 3. Rozpoczęcie właściwego ataku ...................................................s................397 Krok 4. Poszerzenie wyłomu ...................................................s.................................397 Krok 5. „Hakowanie” strony...................................................s..................................397 Rozdział 8. Bramy, routery oraz demony usług internetowych ............................401 Bramy i routery ...................................................s...................................................s.........401 3Com...................................................s...................................................s...................402 Ascend/Lucent ...................................................s...................................................s....409 Cabletron/Enterasys ...................................................s...............................................416 Cisco ...................................................s...................................................s...................423 Intel ...................................................s...................................................s.....................431 Nortel/Bay...................................................s...................................................s...........438 Demony serwerów internetowych...................................................s................................442 Apache HTTP ...................................................s...................................................s.....443 Lotus Domino ...................................................s...................................................s.....445 Microsoft Internet Information Server...................................................s...................446 Netscape Enterprise Server ...................................................s....................................448 Novell Web Server...................................................s.................................................451 O’Reilly Web Site Professional ...................................................s.............................454 Rozdział 9. Systemy operacyjne ........................................................................459 UNIX...................................................s...................................................s...................460 AIX ...................................................s...................................................s.....................462 BSD...................................................s...................................................s.....................470 HP-UX ...................................................s...................................................s................484 IRIX ...................................................s...................................................s....................494 Linux ...................................................s...................................................s...................497 Macintosh...................................................s...................................................s............522 Microsoft Windows ...................................................s...............................................527 Novell NetWare ...................................................s...................................................s..543 OS/2 ...................................................s...................................................s....................552 SCO...................................................s...................................................s.....................566 Solaris ...................................................s...................................................s.................568 Rozdział 10. Serwery proxy i zapory firewall.........................................................573 Bramy międzysieciowe ...................................................s................................................573 BorderWare...................................................s...................................................s.........573 FireWall-1 ...................................................s...................................................s...........577 Gauntlet...................................................s...................................................s...............581 NetScreen ...................................................s...................................................s............585 PIX ...................................................s...................................................s......................589 Raptor...................................................s...................................................s..................596 WinGate ...................................................s...................................................s..............599 Rozdział 11. TigerSuite — kompletny pakiet narzędzi do badania i ochrony sieci ...605 Terminologia ...................................................s...................................................s.............605 Wprowadzenie...................................................s...................................................s...........607 Instalacja ...................................................s...................................................s.............610 Moduły ...................................................s...................................................s......................613 Moduły grupy System Status ...................................................s.................................614 TigerBox Tookit...................................................s...................................................s........619 TigerBox Tools ...................................................s...................................................s...619 TigerBox Scanners...................................................s.................................................624 8 Hack Wars. Na tropie hakerów TigerBox Penetrators ...................................................s.............................................626 TigerBox Simulators ...................................................s..............................................627 Przykładowy scenariusz włamania...................................................s...............................628 Krok 1. Badanie celu...................................................s..............................................629 Krok 2. Rozpoznanie ...................................................s.............................................631 Krok 3. Socjotechnika...................................................s............................................633 Krok 4. Atak...................................................s...................................................s........635 Podsumowanie ...................................................s...................................................s..........635 Dodatek A Klasy adresów IP oraz podział na podsieci.......................................637 Dodatek B Porty standardowe ..........................................................................641 Dodatek C Pełna lista portów specjalnych ........................................................645 Dodatek D Porty usług niepożądanych ..............................................................685 Dodatek E Zawartość płyty CD ........................................................................691 Skorowidz...........................................................................................................701 Rozdział 6. Język C Dla każdego hakera, młodego czy starego, mniej lub bardziej doświadczonego, zna- jomość języka C jest jednym z fundamentów wiedzy. Niemal wszystkie narzędzia i programy, stosowane w trakcie analiz sieci i włamań, powstają właśnie w tym języ- ku. Również w niniejszej książce większość przedstawianego kodu to właśnie kod źródłowy w języku C. Programy te można modyfikować, dostosowywać do własnych potrzeb i odpowiednio kompilować. W pracy nad niniejszym rozdziałem wykorzystano obszerne fragmenty pracy guru programowania Matthew Proberta. Mają one pełnić funkcję wprowadzenia do pro- gramowania w języku C i umożliwić stosowanie przedstawianych w książce (i załą- czonych na CD-ROM-ie) listingów programów. Pełny kurs języka znajdziesz w nie- jednej książce wydawnictwa Helion. Język C wyróżniają następujące cechy, które omawiamy niożej. JJJJ Blokowe konstrukcje sterowania wykonywaniem programuo (typowe dla większości języków wysokiego poziomu). JJJJ Swobodne operowanie podstawowymi obiektami „maszynowymoi” (takimi jak bajty) i możliwość odwoływania się do nich przy użycoiu dowolnej, wymaganej w danej sytuacji, perspektywy obiektowej (typowe dla języków asemblerowych). JJJJ Możliwość wykonywania operacji zarówno wysokiego pozioomu (na przykład arytmetyka zmiennoprzecinkowa), jak i niskiego poziomou (zbliżonych do instrukcji języka maszynowego), co umożliwia twoorzenie kodu wysoce zoptymalizowanego bez utraty jego przenośności. 202 Hack Wars. Na tropie hakerów Przedstawiony w niniejszym rozdziale opis języka C bazować będzie na funkcjach oferowanych przez większość kompilatorów dla komputerów PC. Powinien dzięki temu umożliwić rozpoczęcie tworzenia prostych programów osobom nieposiadają- cym szerokiej wiedzy o języku (uwzględnimy między innymi funkcje zapisane w pa- mięci ROM i funkcje DOS-u). Przyjmujemy założenie, że masz, drogi Czytelniku, dostęp do kompilatora C i od- powiedniej dokumentacji funkcji bibliotecznych. Programy przykładowe powstały w Turbo C firmy Borland; większość elementów niestandardowych tego narzędzia uwzględniono również w późniejszych edycjach Microsofti C. Wersje języka C W pierwotnej edycji języka C (jeszcze przed publikacją Kernighana i Ritchie’ego, The C Programming Language, Prentice-Hall 1988 (polskie wydanie: Język ANSI C, Wydawnictwa Naukowo-Techniczne 1994)) zintegrowane operatory przypisania (+=, *= itd.) definiowane były odwrotnie (tj. =+, =* itd.). Znakomicie utrudniało to inter- pretację wyrażeń takich jak: (cid:3) co mogłoby znaczyć (cid:3) lub (cid:6)(cid:3)(cid:7) Ritchie szybko zauważył dwuznaczność takiego zapisu i zmodyfikował go do postaci znanej dzisiaj (+=, *= itd.). Mimo to wciąż stosowanych jest wiele odmian będących rodzajem wypośrodkowania między pierwotną wersją języka C Kernighana i Ritchie’ego a językiem ANSI C. Różnice między nimi dotyczą przede wszystkim: JJJJ wprowadzenia prototypów funkcji i zmiany preambuły definoicji funkcji, aby dostosować ją do stylu prototypów, JJJJ wprowadzenia znaku wielokropka (...) do oznaczenia list oargumentów o zmiennej długości, JJJJ wprowadzenia słowa kluczowego :3. (dla funkcji, które nie zwracają wartości) i typu :3.(cid:6) dla ogólnych zmiennych wskaźnikowych, JJJJ wprowadzenie w preprocesorze mechanizmów scalania ciągoów, wklejania elementu (token-pasting) i zamiany na ciąg (string-izing), JJJJ dodanie w preprocesorze translacji „trygrafów” (trigraph) — trójznakowych sekwencji reprezentujących znaki specjalne, JJJJ dodanie w preprocesorze dyrektywy 46+1+ i formalizacja pseudofunkcji ./-+6/.(cid:16)(cid:17), Rozdział 6.  Podstawy programowania dla hakerów 203 JJJJ wprowadzenie ciągów i znaków wielobajtowych, zapewniajoących obsługę języków narodowych, JJJJ wprowadzenie słowa kluczowego 712/. (jako uzupełnienie słowa 92712/., stosowane w deklaracjach liczb całkowitych) i jednooargumentowego operatora plus ((cid:21)). Klasyfikowanie języka C Szerokie możliwości języka C, dopuszczenie bezpośredniego operowania na adresach i danych w pamięci oraz strukturalne podejście do programowania sprawiają, że język ten klasyfikuje się jako „język programowania średniego poziomu”. Znajduje to wyraz w mniejszej liczbie gotowych rozwiązań niż w językach wysokiego poziomu, takich jak BASIC, ale wyższym poziomie strukturalnym niż niskoopoziomowy Assembler. Słowa kluczowe Pierwotna edycja języka C definiuje 27 słów kluczowych. Komitet ANSI dodał do nich 5 nowych. Wynikiem są dwa standardy języka, choć norma ANSI przejęła więk- szość elementów od Kerninghana i Ritchie’ego. Oto listao: +983 ,6/+ -+7/ -+6 -3278 -32829/ ./0+98 .3 .39,/ /7/ /29 /8/62 03+8 036 1383 0 28 321 6/178/6 6/8962 7368 712/. 7/30 78+8- 7869-8 7;8- 84/./0 9232 92712/. :3. :3+8/ ;/ Warto zwrócić uwagę, że niektóre kompilatory C wprowadzają dodatkowe słowa klu- czowe, specyficzne dla środowiska sprzętowego. Warto zoapoznać się z nimi. Struktura języka C Język C wymaga programowania strukturalnego. Oznacza to, że na program składa się pewna grupa nawzajem wywołujących się bloków kodu. Dostępne są różnorodne polecenia służące do konstruowania pętli i sprawdzaniao warunków: .3(cid:3);/(cid:30)036(cid:30);/(cid:30)0(cid:30)-+7/ Blok programu w języku C ujmowany jest w nawiasy klamrowe (). Może on być kompletną procedurą, nazywaną funkcją lub częścią kodu funkcji. Przyjrzyjmy się przykładowi: 204 Hack Wars. Na tropie hakerów 0(cid:6) (cid:7)  +  ,   Instrukcje wewnątrz nawiasów klamrowych wykonane zostaną tylko wtedy, gdy speł- niony zostanie warunek  . Jako kolejny przykład przedstawimy pełny blok kodu funkcji, zawierający wewnątrz blok pętli: 28$)(cid:6)(cid:7)  28 .3  46280(cid:6)2 463;+.-,/+6/793. .3 (cid:7) 7-+20(cid:6).(cid:30)(cid:7)  ;/(cid:6)  (cid:7) 6/8962(cid:6)(cid:7)  Zwróćmy uwagę, że każdy wiersz instrukcji zakończony jest średnikiem, o ile nie jest sygnałem początku bloku kodu (w takim przypadku kolejnym znakiem jest nawias klamrowy). Język C rozpoznaje wielkość liter, ale nie bierze pod uwagę białych zna- ków. Odstępy między poleceniami są pomijane, stąd konieczność użycia średnika, aby oznaczyć koniec wiersza. Tego rodzaju podejście powoduje, że następujące pole- cenia interpretowane są jako identyczne:       Ogólna postać programu w języku C jest następująca: JJJJ instrukcje preprocesora kompilacji, JJJJ globalne deklaracje danych. JJJJ deklaracje i definicje funkcji (włączając w to zawartoość programu): 84(cid:4);6+-+2+2(cid:6)78+4+6+/86(cid:17);(cid:7)  27869-/  84(cid:4);6+-+20 (cid:6)78+4+6+/86(cid:17);(cid:7)  27869-/  84(cid:4);6+-+20(cid:6)78+4+6+/86(cid:17);(cid:7)  27869-/  Rozdział 6.  Podstawy programowania dla hakerów 205 84(cid:4);6+-+202(cid:6)78+4+6+/86(cid:17);(cid:7)  27869-/  Komentarze Podobnie jak większość języków, C pozwala umieszczać w kodzie programu komen- tarze. Ich ogranicznikami są symbole (cid:6) i (cid:6) : 4$3/78;/673/28+6+;694 (Równie często korzysta się z komentarzy jednoliniowych, otrzymywanych poprzez sekwencję //, np.:  $38/ /78;/673/28+6+  (cid:7) Biblioteki Programy w języku C kompiluje się i łączy z funkcjami bibliotecznymi, dostarcza- nymi wraz z kompilatorem. Na biblioteki składają się funkcje standardowe, których działanie zdefiniowane zostało w normie ANSI. Ich powiązanie z konkretnym kom- pilatorem zapewnia dostosowanie do platformy sprzętowej. Wynika stąd, że standardowa funkcja biblioteczna 46280(cid:16)(cid:17) działa tak samo w systemach DEC VAX i IBM PC, choć różni się jej, zapisany w bibliotece, kod maszynowy. Programista C nie musi za- głębiać się w zawartość bibliotek, wymagana jest jedynie umiejętność ich stosowania i znajomość działania funkcji, które pozostają niezmieonne na każdym komputerze. Tworzenie programów Kompilacja Zanim zajmiemy się funkcjami, poleceniami, sekwencjami i innymi zaawansowanymi zagadnieniami, przyjrzyjmy się praktycznemu przykładowi, w którym doprowadzimy do skompilowania kodu. Kompilowanie programów C jest stosunkowo prostą czyn- nością, jednak różni się zależnie od stosowanego kompilatora. Kompilatory wyposażone w menu umożliwią skompilowanie, skonsolidowanie i uruchomienie programu jed- nym wciśnięciem klawisza. Podchodząc jednak do zagadnienia możliwie uniwersal- nie i tradycyjnie, przeprowadzimy poniżej całą proceduorę w oparciu o wiersz poleceń. W dowolnym edytorze wprowadzamy poniższy fragment kodu i zapisujemy plik jako przyklad.c: 4 46o+.3;392+88/783; 4 206 Hack Wars. Na tropie hakerów 2-9./78.3  :3.+2(cid:6)(cid:7)  46280(cid:6)/32(cid:7)  Kolejnym krokiem jest skompilowanie kodu do postaci pliku programu — dopiero wtedy można będzie go uruchomić (czy też wykonać). W wierszu poleceń w tym sa- mym katalogu, w którym zapisaliśmy plik przyklad.c, wprowadzamy następujące po- lecenie kompilacji: --46+. - Nie wolno zapominać, że składnia polecenia kompilacji zależy od kompilatora. Nasz przykład opiera się na standardzie języka C. Współcześnie jednak popularne jest sto- sowanie składni wywodzącej się z kompilatora GNU C: 1--46+. - Po wykonaniu takiego polecenia nasz kod jest już skompilowany i ma postać pliku programu, który możemy uruchomić. Wynik jego działania łatwo wydedukować z prostego kodu: /3 6/77+2/83-32829/ To wszystko! Kompilowanie małych programów w C nie jest trudne, należy jedynie mieć świadomość szkodliwych niekiedy efektów ich działania. Programy przedsta- wiane na stronach tej książki i załączone na CD-ROM-ie są oczywiście znacznie bar- dziej skomplikowane, jednak zasady pozostają te same. Typy danych W języku C wyróżnia się cztery podstawowe typy danych: znakowy, całkowity, zmiennoprzecinkowy i nieokreślony. Odpowiadają im słowa kluczowe: -+6, 28, 03+8 i :3.. Dalsze typy danych tworzy się na tej podstawie, dodając modyfikatory: 712/. (ze znakiem), 92712/. (bez znaku), 321 (długa) i 7368 (krótka). Modyfika- tor 712/. jest elementem domyślnym, co sprawia, że jego użycie może się okazać konieczne jedynie w wypadku gdy zastosowano przełącznik kompilacji nakazujący domyślne korzystanie ze zmiennych bez znaku. Rozmiar każdego typu danych zależy od platformy sprzętowej, jednak norma ANSI wyznacza pewne zakresy minimalne, zestawione w tabeli 6.1. W praktyce tak określone konwencje oznaczają, że typ danych -+6 nadaje się najle- piej do przechowywania zmiennych typu znacznikowego, takich jako kody stanu, o ograniczonym zakresie wartości. Można również korzystać z typu 28. Gdy jednak zakres wartości nie przekracza 127 (lub 255 dla 92712/.-+6), każda deklarowana w ten sposób zmienna przyczynia się do niepotrzebnego oobciążania pamięci. Natomiast trudniejsze jest pytanie o to, z którego typu liczb rzeczywistych korzystać — 03+8, .39,/ czy 321 .39,/. Gdy wymagana jest dokładność, na przykład w aplikacji stosowanej w księgowości, instynktownie powinniśmy użyć typu 321.39,/, Rozdział 6.  Podstawy programowania dla hakerów 207 Tabela 6.1. Rozmiary i zakresy typów danych języka C Typ -+6 92712/.-+6 28 92712/.28 32128 92712/.32128 03+8 .39,/ 321.39,/ Rozmiar Zakres 8 8 16 16 32 32 32 64 80 –128 do 127 0 do 255 –32 768 do 32 767 0 do 65 535 –2 147 483 648 do 2 147 483 647 0 do 4 294 967 295 precyzja 6-cyfrowa precyzja 10-cyfrowa precyzja 10-cyfrowa wiąże się to jednak z wykorzystaniem przez każdą zmienną 10 bajtów. Obliczenia na liczbach rzeczywistych nie są tak dokładne jak na liczbach całkowitych, warto więc zawsze rozważyć użycie typu 28 i „obejście” problemu. Typ danych 03+8 nie jest zbyt dobry, gdyż jego 6-cyfrowa precyzja nie zapewnia dokładności, na której zawsze będziemy mogli polegać. Ogólną zasadą jest korzystanie z typów całkowitych tak szeroko, jak tylko jest to możliwe, a gdy pojawia się konieczność użycia liczb rze- czywistych, wprowadzenie typu .39,/. Deklarowanie zmiennej Każda zmienna musi zostać zadeklarowana przed użyciem. Ogólną postacią deklara- cji zmiennej jest: 842+;+ Aby więc przykładowo zadeklarować zmienną  typu 28, przeznaczoną do przecho- wywania wartości z zakresu od –32 768 do 32 767, użyjemy inostrukcji: 28 Ciągi znakowe deklarować można jako tabele znaków: -+62+;+-,+)///28(cid:17); Deklaracja ciągu o nazwie 2+;73 i długości 30 znaków, wyglądać będzie następująco: -+62+;73  Tablice danych innych typów mogą mieć więcej niż jeden wymiar. Oto deklaracja dwuwymiarowej tablicy liczb całkowitych: 28   Elementy tablicy wywołujemy jako:       22 208 Hack Wars. Na tropie hakerów Wyróżnia się trzy poziomy dostępu do zmiennych: lokalny, na poziomie modułu i globalny. Zmienna deklarowana wewnątrz bloku kodu będzie dostępna wyłącznie dla instrukcji wewnątrz tego bloku. Zmienna deklarowana poza blokami kodu funkcji, ale poprzedzona modyfikatorem 78+8-, będzie dostępna wyłącznie instrukcjom we- wnątrz modułu kodu źródłowego. Zmienna deklarowana poza blokami kodu funkcji i niepoprzedzona modyfikatorem będzie dostępna dla dowolnych instrukcji w dowol- nym module programu. Na przykład: 28,+. 78+8-28+ :3.+2(cid:6)(cid:7)(cid:6)346+;.+092-++2.+o+,/./8+6+-;+683-;6+-+2/(cid:30) /.2+;8+464+.9;;/8+763786/ /2/(cid:6),3834+836.32/ 469/+32879+092-6/8962 ,8/139282(cid:30);+ .2+78642 46o+./.34796:3.  (cid:7)  28 28  092-++(cid:6)(cid:7)   4#46+;./2/-/22++/786G;2+ 4 0(cid:6)+ (cid:7)  28, 036(cid:6), , ,HH(cid:7) 46280(cid:6)2/3 36.(cid:7)   W powyższym przykładzie zmienna ,+. jest dostępna dla wszystkich, kompilowa- nych jako jeden program, modułów kodu źródłowego. Zmienna + jest osiągalna dla wszystkich instrukcji w funkcjach +2(cid:16)(cid:17) i 092-++(cid:16)(cid:17), ale pozostaje niewidoczna z poziomu innych modułów. Zmienne  i  są dostępne wyłącznie instrukcjom we- wnątrz funkcji +2(cid:16)(cid:17). Z kolei zmienna , może być użyta wyłącznie przez instrukcje wewnątrz bloku kodu po instrukcji 0. Jeżeli drugi blok kodu faktycznie ma skorzystać ze zmiennej ,+., wymagane będzie umieszczenie w nim deklaracji zmiennej globalnej /8/62: /8/6228,+. 092-+,(cid:6)(cid:7)   Język C nie stawia szczególnych przeszkód w przypisywanoiu do siebie różnych typów danych. Przykładowo możemy zadeklarować zmienną typu -+6, co spowoduje przy- pisanie do przechowywania jej wartości jednego bajtu danych. Można podjąć próbę przypisania do niej wartości spoza tego zakresu: Rozdział 6.  Podstawy programowania dla hakerów 209 :3.+2(cid:6)(cid:7)     Zmienna  może przechowywać wartości z zakresu od –127 do 128, a więc wartość 5000 nie zostanie przypisana.  przyjmie jednak wartość 136. Potrzeba przypisania różnych typów danych nie jest niczym oryginalnym. Aby po- wstrzymać kompilator od generowania ostrzeżeń o takich operacjach, można skorzy- stać z instrukcji konwersji (cast statement), informując kompilator o tym, że operacja wykonywana jest świadomie. Instrukcję taką budujemy, umieszczając przed zmienną lub wyrażeniem nazwę typu danych ujętą w nawiasy: :3.+2(cid:6)(cid:7)  03+8 28    (cid:6)28(cid:7)  Operacja rzutowania (cid:16)28(cid:17) informuje kompilator o konieczności konwersji wartości zmiennej zmiennoprzecinkowej  do liczby całkowitej, zanim ta zostanie przypisana do zmiennej . Parametry formalne Funkcja w języku C może przyjmować parametry przekazywane przez funkcję wy- wołującą. Parametry te deklaruje się podobnie jak zmienne, podając ich nazwy we- wnątrz towarzyszących nazwie funkcji nawiasów: 28(cid:6)28(cid:30)28(cid:7)   4;6G4+6+/864323 3246/4+6+/864 6/8962(cid:6)4(cid:7)  :3.+2(cid:6)(cid:7)  28+ 28, 28- + , -(cid:6)+(cid:30),(cid:7) 46280(cid:6).6+.6G;2+76.2(cid:30)+(cid:30),(cid:30)-(cid:7)  210 Hack Wars. Na tropie hakerów Modyfikatory dostpu Stosuje się dwa modyfikatory dostępu: -3278 i :3+8/. Wartość zmiennej zadekla- rowanej jako -3278 nie może zostać zmieniona przez program, wartość zmiennej za- deklarowanej jako :3+8/ może zostać zmieniona przez program. Dodatkowo, za- deklarowanie zmiennej jako :3+8/ uniemożliwia kompilatorowi zaalokowanie jej do rejestru i ogranicza przeprowadzaną na niej optymaloizację. Typy klas przechowywania zmiennych Język C przewiduje cztery rodzaje przechowywania zmiennych: /8/62, 78+8-, +983 i 6/178/6. Typ /8/62 umożliwia modułowi kodu źródłowego dostęp do zmiennej zadeklarowanej w innym module. Zmienne 78+8- dostępne są wyłącznie z poziomu bloku kodu, w którym zostały zadeklarowane. Dodatkowo, jeżeli zmienna ma zasięg lokalny, zachowuje swoją wartość między kolejnymi woywołaniami bloku kodu. Zmienne rejestrowe (6/178/6) są, gdy tylko jest to możliwe, przechowywane w reje- strach procesora. Zapewnia to najszybszy dostęp do ich wartości. Typ +983 stosuje się wyłącznie w odniesieniu do zmiennych lokalnych. Nakazuje on zachowywanie war- tości zmiennej lokalnej. Ponieważ jest to modyfikator domyślny, rzadko można spo- tkać go w programach. Operatory Operatory to elementy kodu, które nakazują wykonanie obliczeń na zmiennych. W ję- zyku C dostępne są następujące:  4 H (cid:3)  HH  H (cid:3) 4     adres, pośredniość, plus jednoargumentowy, minus jednoargumentowy, dopełnienie bitowe, negacja logiczna, jako prefiks — preinkrementacja, jako sufiks — postinkrementa5cja, jako prefiks — predekrementacja, jako sufiks — postdekrementa5cja, dodawanie, odejmowanie, mnożenie, dzielenie, reszta z dzielenia (modulo), przesunięcie w lewo, przesunięcie w prawo, bitowa operacja AND, Rozdział 6.  Podstawy programowania dla hakerów 211  (    4   H (cid:3)     (       (cid:3) +  (cid:6)(cid:7) bitowa operacja OR, bitowa operacja XOR, logiczna operacja AND, logiczna operacja OR, przypisanie, przypisanie iloczynu, przypisanie ilorazu, przypisanie reszty (modułu), przypisanie sumy, przypisanie różnicy, przypisanie przesunięcia w lewo, przypisanie przesunięcia w prawo, przypisanie wyniku bitowej operacji AND, przypisanie wyniku bitowej operacji OR, przypisanie wyniku bitowej operacji XOR, mniejsze niż, większe niż, mniejsze lub równe, większe lub równe, równe, różne od, bezpośredni selektor składnika, pośredni selektor składnika, jeżeli + to prawda, to , w przeciwnym razie  definiowanie tablic, nawiasy oddzielają warunki i wyrażenia, wielokropek wykorzystuje się w listach parametrów formalnych pr5ototypów funkcji do deklarowania zmiennej liczby parametrów lub parametrów zmiennych typów. Aby zilustrować sposób korzystania z podstawowych operatorów, przyjrzyjmy się krótkiemu programowi: :3.+2(cid:6)(cid:7)  28+ 28, 28- + 4 647+2//22/+;+683-4 ,+  4 647+2//22/,;+683-+43./32/846/4 -,4 4 647+2//22/-;+683-,4323 32/846/4 0(cid:6)+-(cid:7) 4#46+;./2/-++8+7+;+683+8-4 212 Hack Wars. Na tropie hakerów 4987(cid:6)/22++/784+678+(cid:7) /7/ 4987(cid:6)/22++/782/4+678+(cid:7)  Typowym sposobem zwiększenia wartości zmiennej o 1 jesot wiersz: H Język C dostarcza operatora inkrementacji, wystarczyo więc napisać: HH W podobny sposób korzystamy z operatora dekrementacji, czyli zmniejszania war- tości o 1: (cid:3)(cid:3) Pozostałe operatory matematyczne wykorzystujemy podobnie. Warto jednak pamię- tać o wprowadzanych przez język C możliwościach zapisou skróconego: Zapis typowy Zapis w jzyku C H (cid:3) 4    HH (cid:3)(cid:3) 4    Funkcje Funkcje to procedury kodu źródłowego tworzące program w języku C. Ich ogólną po- stacią jest: ;6+-+2)842+;+)092-(cid:6)78+)4+6+/86(cid:17);(cid:7)  27869-/  ;6+-+2)84 to typ zwracanej przez funkcję wartości: -+6, 28, .39,/, :3. itp. Kod wewnątrz funkcji C pozostaje niewidoczny dla innych funkcji C. Nie można wy- konywać skoków z jednej funkcji do wnętrza innej. Funkcje mogą jedynie wywoły- wać inne funkcje. Nie wolno również definiować funkcji wewnątrz innych funkcji. Definicja musi zostać umieszczona bezpośrednio na pozoiomie modułu kodu. Parametry przekazywane są do funkcji jako wartości lub jako odwołania (wskaźniki). Gdy parametr jest przekazywany jako wartość, funkcja otrzymuje kopię tej wartości. Parametr przekazywany jako odwołanie jest jedynie wskaźnikiem do właściwego pa- rametru. Pozwala to na zmianę jego wartości z poziomu wywołanej funkcji. W poniż- szym przykładzie przekazujemy dwa parametry jako wartość do funkcji 092-++(cid:16)(cid:17), Rozdział 6.  Podstawy programowania dla hakerów 213 która następnie podejmuje próbę zmiany wartości przekazanych zmiennych. Drugim krokiem jest przekazanie tych samych parametrów do funkcji 092-+,(cid:16)(cid:17), która rów- nież podejmuje próbę zmiany wartości zmiennych: 2-9./78.3  28092-++(cid:6)28(cid:30)28(cid:7)   492-+469/.;+4+6+/86+3;+683-(cid:30)84 4 4 46280(cid:6)2 +683;092-++(cid:6)(cid:7).  +683;092-++8(cid:6)(cid:7).(cid:30)(cid:30)(cid:7) 6/8962(cid:6)(cid:7)  28092-+,(cid:6)284(cid:30)284(cid:7)   492-+469/.;+4+6+/86+33.;3o+2+(cid:30)4 444 444 46280(cid:6)2 +683;092-+,(cid:6)(cid:7).  +683;092-+,8(cid:6)(cid:7).(cid:30)4(cid:30)4(cid:7) 6/8962(cid:6)4(cid:7)  :3.+2(cid:6)(cid:7)  28 28 28   092-++(cid:6)(cid:30)(cid:7) 092-+,(cid:6)(cid:30)(cid:7) 46280(cid:6)2 +683.(cid:30);+683.(cid:30);+683.(cid:30)(cid:30)(cid:30)8(cid:7)  092-+,(cid:16)(cid:17) nie zmienia wartości otrzymanych parametrów. Modyfikowana jest za- wartość wskazywanych parametrami adresów pamięci. O ile 092-++(cid:16)(cid:17) otrzymuje z funkcji +2(cid:16)(cid:17) wartości zmiennych  i , 092-+,(cid:16)(cid:17) otrzymuje z funkcji +2(cid:16)(cid:17) ich adresy w pamięci. Przekazywanie tablicy do funkcji Następujący program przekazuje do funkcji tablicę, a funkcja nadaje wartości ele- mentom tablicy: 214 Hack Wars. Na tropie hakerów 2-9./78.3  :3.092-++(cid:6)28(cid:7)  282 036(cid:6)2 2 2HH(cid:7) 22  :3.+2(cid:6)(cid:7)  288+,-+  28-2 092-++(cid:6)8+,-+(cid:7) 036(cid:6)-2 -2 -2HH(cid:7) 46280(cid:6)2 +683///289.;237.(cid:30)-2(cid:30)8+8,-+-2(cid:7)  Parametr funkcji, 28, jest tablicą dowolnej długości. Deklaracja taka jest możli- wa, ponieważ kompilator przekazuje jedynie adres początkowy tablicy, a nie wartości poszczególnych jej elementów. Konsekwencją tego jest fakt, że funkcja może zmie- niać wartości elementów tablicy. Aby uniemożliwić funkcji wprowadzanie modyfika- cji, konieczne jest użycie typu -3278: 092-++(cid:6)-327828(cid:7)   Przy takiej deklaracji wiersz zmieniający zawartość tablicy wywołałby błąd kompila- cji. Określenie parametru jako wartości stałej nie likwiduje jednak pośredniości jego przekazania. Ilustruje to poniższy program: 2-9./78.3  :3.092-++(cid:6)-327828(cid:7)  284486 282 4$/2;/671/2/69/3786/ /2/ 7974-3974328/6-832:/6732 4 4(cid:6)2/,/4/-2+32;/67+;7+ 2+(cid:7)4 4/78;7+ 2/-3278(cid:30)+486(cid:3)2/4 486 036(cid:6)2 2 2HH(cid:7)  44862 486HH   :3.+2(cid:6)(cid:7)  Rozdział 6.  Podstawy programowania dla hakerów 215 288+,-+  28-2 092-++(cid:6)8+,-+(cid:7) 036(cid:6)-2 -2 -2HH(cid:7) 46280(cid:6)2 +683///289.;237.(cid:30)-2(cid:30)8+,-+-2(cid:7)  Przekazywanie parametrów funkcji main() Język C umożliwia przekazanie parametrów do uruchamianego programu z poziomu systemu operacyjnego. Do ich odczytania wykorzystujeo się zmienne +61- i +61:: 2-9./78.3  :3.+2(cid:6)28+61-(cid:30)-+64+61:(cid:7)  282 036(cid:6)2 2+61-2HH(cid:7) 46280(cid:6)2 +6837-4+6+/869.837(cid:30)2(cid:30)+61:2(cid:7)  Parametr +61- przechowuje liczbę przekazanych programowi parametrów. W tablicy +61: zapisane są ich adresy; +61:  jest zawsze nazwą uruchamianego programu. Mechanizm ten ma szczególne znaczenie dla aplikacji wymagających dostępu do pli- ków systemowych i danych. Rozważmy następującą sytuację: mała aplikacja obsługi baz danych przechowuje swoje dane w pojedynczym plikuo dane.dat; aplikacja ta musi zostać tak zaprojektowana, aby można było uruchomić ją z dowolnego katalogu, czy to na dysku twardym, czy dyskietce; musi również zapewnić uruchamianie za pośred- nictwem ścieżki wyszukiwania DOS-u (4+8). Do poprawnej pracy aplikacji jest więc wymagane, aby zawsze mogła odnaleźć plik dane.dat. Rozwiązanie takie zapewni przyjęcie założenia, że plik danych jest zawsze w identycznym katalogu co sam pro- gram. Poniższy fragment ilustruje wykorzystanie parametrów +61- i +61: w celu utwo- rzenia ścieżki do pliku danych aplikacji: 2-9./78621  -+62+;+)49   :3.+2(cid:6)28+61-(cid:30)-+64+61:(cid:7)  -+644).+2-$ $ -+644 786-4(cid:6)2+;+)49(cid:30)+61: (cid:7) 4786786(cid:6)2+;+)49(cid:30) //(cid:7)(cid:6)34+8368;364637/6/2/3+o- 8/6+-  (cid:7) 0(cid:6)4 (cid:7)   4 969-3/23;/784/ 4  216 Hack Wars. Na tropie hakerów 4786786(cid:6)2+;+)49(cid:30) -3(cid:7)   4 799/378+829324 ;/(cid:6)4(cid:6)4(cid:3) (cid:7)  (cid:7) 4(cid:3)(cid:3) 786-4(cid:6)4(cid:30)4).+2-(cid:7)  Przedstawiony program tworzy i zapisuje w zmiennej 2+;+)49 ciąg postaci ścież- ka\dane.dat. Jeżeli więc przykładową nazwą pliku uruchomieniowego będzie test.exe i zostanie on umieszczony w katalogu \borlandc, zmiennej 2+;+)49 przypisany zostanie ciąg ,36+2.-.+2/ .+8. Wyjlcie z funkcji Polecenie 6/8962 powoduje natychmiastowe wyjście z funkcji. Jeżeli w deklaracji funkcji podano typ zwracanej wartości, w poleceniu 6/8962 należy użyć parametru te- go samego typu. Prototypy funkcji Prototypy funkcji umożliwiają kompilatorowi C sprawdzanie poprawności przekazy- wanych, do i z funkcji, danych. Ma to istotne znaczenie jako zabezpieczenie przed przekroczeniem zakresu zaalokowanego dla zmiennej obszaru pamięci. Prototyp funkcji umieszcza się na początku programu po poleceniach preprocesora (takich jak 2-9./) i przed deklaracjami funkcji. Polecenia preprocesora C W języku C w treści kodu źródłowego można umieszczać polecenia dla kompilatora. Określa się je terminem polecenia preprocesora. Norma ANSI definiuje następujące: 0 0./0 02./0 /7/ /0 /2.0 2-9./ ./02/ 92./0 2/ /6636 46+1+ Wszystkie polecenia preprocesora rozpoczyna znak krzyżyka (hash), czyli #. Każde wymaga osobnego wiersza kodu (uzupełnionego ewentualnie komentarzem). Poniżej przedstawiamy krótkie omówienie. Rozdział 6.  Podstawy programowania dla hakerów 217 #define Polecenie ./02/ tworzy identyfikator, który kompilator zastąpi podanym ciągiem w danym module kodu źródłowego. Na przykład: ./02/# ./02/$ # Kompilator zastąpi wszystkie dalsze wystąpienia ciągu # znakiem , a wszystkie dalsze wystąpienia ciągu $  — ciągiem  . Zastępowaniu nie podlegają identyfi- katory wewnątrz znaków cudzysłowu, a więc wiersz: 46280(cid:6)$ (cid:7) nie zostanie zmieniony, ale 46280(cid:6).(cid:30)#(cid:7) podlega modyfikacji. Polecenie ./02/ może również zostać użyte do definiowania makr, także makr z pa- rametrami. Do zapewnienia poprawności zastąpień zaleca się ujmowanie parametrów w nawiasy. W poniższym przykładzie deklarujemy makro o nazwie +61/6(cid:16)(cid:17), przyj- mujące dwa parametry i zwracające ten z nich, którego owartość jest większa. 2-9./78.3  ./02/+61/6(cid:6)+(cid:30),(cid:7)(cid:6)+,(cid:7)(cid:6)+(cid:7)(cid:6),(cid:7) 28+2(cid:6)(cid:7)  46280(cid:6)2./78;67/(cid:30)+61/6(cid:6)(cid:30)(cid:7)(cid:7)  #error Polecenie /6636 powoduje przerwanie procesu kompilacji i wyświetlenie podanego tekstu, na przykład: /6636#     powoduje zatrzymanie kompilacji i wyświetlenie: #     #include Polecenie 2-9./ nakazuje kompilatorowi odczytanie i przetworzenie zawartości dodatkowego pliku źródłowego. Nazwa pliku musi zostać ujęta w cudzysłów lub wstawiona między znaki , na przykład: 2-9./3.9/ - 2-9./78.3  Jeżeli nazwa pliku została wpisana między znaki , kompilator wyszukuje
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Hack Wars. Tom 1. Na tropie hakerów
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: