Rozdział X



Pobieranie 1,11 Mb.
Strona1/17
Data09.04.2018
Rozmiar1,11 Mb.
  1   2   3   4   5   6   7   8   9   ...   17


Rozdział 6.  Podstawy programowania dla hakerów

Rozdział 6.
Podstawy programowania dla hakerów

Język C


Dla każdego hakera, młodego czy starego, mniej lub bardziej doświadczonego, znajomość 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ęzyku. 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 programowania 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 niejednej książce wydawnictwa Helion.

Język C wyróżniają następujące cechy, które omawiamy niżej.

  • Blokowe konstrukcje sterowania wykonywaniem programu (typowe dla większości języków wysokiego poziomu).

  • Swobodne operowanie podstawowymi obiektami „maszynowymi” (takimi jak bajty) i możliwość odwoływania się do nich przy użyciu dowolnej, wymaganej w danej sytuacji, perspektywy obiektowej (typowe dla języków asemblerowych).

  • Możliwość wykonywania operacji zarówno wysokiego poziomu (na przykład arytmetyka zmiennoprzecinkowa), jak i niskiego poziomu (zbliżonych do instrukcji języka maszynowego), co umożliwia tworzenie kodu wysoce zoptymalizowanego bez utraty jego przenośności.

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 pamięci ROM i funkcje DOS-u).



Przyjmujemy założenie, że masz, drogi Czytelniku, dostęp do kompilatora C i odpowiedniej 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 Microsoft 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 interpretację wyrażeń takich jak:

x=-y


co mogłoby znaczyć

x = x - y



lub

x = (-y)


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:

  • wprowadzenia prototypów funkcji i zmiany preambuły definicji funkcji, aby dostosować ją do stylu prototypów,

  • wprowadzenia znaku wielokropka (...) do oznaczenia list argumentów o zmiennej długości,

  • wprowadzenia słowa kluczowego void (dla funkcji, które nie zwracają wartości) i typu void * dla ogólnych zmiennych wskaźnikowych,

  • wprowadzenie w preprocesorze mechanizmów scalania ciągów, wklejania elementu (token-pasting) i zamiany na ciąg (string-izing),

  • dodanie w preprocesorze translacji „trygrafów” (trigraph) — trójznakowych sekwencji reprezentujących znaki specjalne,

  • dodanie w preprocesorze dyrektywy #pragma i formalizacja pseudofunkcji declared(),

  • wprowadzenie ciągów i znaków wielobajtowych, zapewniających obsługę języków narodowych,

  • wprowadzenie słowa kluczowego signed (jako uzupełnienie słowa unsigned, stosowane w deklaracjach liczb całkowitych) i jednoargumentowego operatora plus (+).

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ż niskopoziomowy 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ększość elementów od Kerninghana i Ritchie’ego. Oto lista:

auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

Warto zwrócić uwagę, że niektóre kompilatory C wprowadzają dodatkowe słowa kluczowe, specyficzne dla środowiska sprzętowego. Warto zapoznać się z nimi.


  1   2   3   4   5   6   7   8   9   ...   17


©operacji.org 2017
wyślij wiadomość

    Strona główna