Kurs programowania w C cz. 117

Nasza ocena:

5
Pobrań: 7
Wyświetleń: 574
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C  cz. 117 - strona 1

Fragment notatki:

134 ROZDZIAŁ 18. NAPISY int main(void) { char napis1[80] = "hello "; char *napis2 = "world"; strncat(napis1, napis2, sizeof napis1 - 1); puts(napis1); return 0; } Osoby, które programowały w językach skryptowych muszą bardzo uważać na łączenie i kopiowanie napisów. Kompilator języka C nie wykryje nadpisania pamięci za zmienną łańcu- chową i nie przydzieli dodatkowego obszaru pamięci. Może się zdarzyć, że program pomimo nadpisywania pamięci za łańcuchem będzie nadal działał, co bardzo utrudni wykrywanie tego typu błędów! Bezpieczeństwo kodu a łańcuchy Przepełnienie bufora O co właściwie chodzi z tymi funkcjami strncpy i strncat? Otóż, niewinnie wyglądają- ce łańcuchy mogą okazać się zabójcze dla bezpieczeństwa programu, a przez to nawet dla systemu, w którym ten program działa. Może brzmi to strasznie, lecz jest to prawda. Może pojawić się tutaj pytanie: “w jaki sposób łańcuch może zaszkodzić programowi?”. Otóż może i to całkiem łatwo. Przeanalizujmy następujący kod: #include  #include  #include  int main(int argc, char **argv) { char haslo_poprawne = 0; char haslo[16]; if (argc!=2) { fprintf(stderr, "uzycie: %s haslo", argv[0]); return EXIT_FAILURE; } strcpy(haslo, argv[1]); /* tutaj następuje przepełnienie bufora */ if (!strcmp(haslo, "poprawne")) { haslo_poprawne = 1; } if (!haslo_poprawne) { fputs("Podales bledne haslo.\n", stderr); return EXIT_FAILURE; } puts("Witaj, wprowadziles poprawne haslo."); return EXIT_SUCCESS; } Jest to bardzo prosty program, który wykonuje jakąś akcję, jeżeli podane jako pierwszy argument hasło jest poprawne. Sprawdźmy czy działa: ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz