Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.6.PODSTAWYJĘZYKÓWPROGRAMOWANIA
27
mechanizmusprawdzaniagranictablic,tonaprogramistęspadazapewnienie,
żeodwoływaniesiędotablicyniebędziesięgałopozajejgranicę.Jeśliniewyko-
namysprawdzenia,czydanedostarczoneprzezużytkownikamogąprzepełnić
bufor,programmożezostaćoszukanytak,byprzechowałdaneużytkownikapoza
buforem.Atakującymożezmanipulowaćdanewejściowewtakisposób,abyspo-
wodowaćniewłaściwedziałanieprogramuiprzełamaćzabezpieczeniasystemu.
Opracowanowieletechnikwyszukiwaniaprzepełnieńbuforawprogramach,
alezograniczonymisukcesami.
Wprzypadkugdyprogramzostałnapisanywbezpiecznymjęzyku,który
zawieraautomatycznesprawdzaniegranic,problemtakiniewystępuje.Tasama
analizaprzepływudanych,którajestużywanadoeliminowanianadmiarowych
sprawdzańzakresów,możebyćrównieżużytadolokalizowaniaprzepełnień
bufora.Głównaróżnicapolegajednaknatym,żepominięciewyeliminowania
sprawdzaniazakresówspowodujejedynieniewielkidodatkowykosztwczasie
wykonywaniaprogramu,podczasgdyniewykryciepotencjalnegoprzepełnienia
buforamożeskompromitowaćzabezpieczeniasystemu.
Choćwystarczającejestużycieprostychtechnikdooptymalizowaniaspraw-
dzaniazakresów,zaawansowaneanalizy,takiejakśledzeniewartościwskaźników
międzyprocedurami,konieczne,jeślichcemyuzyskaćwysokiejjakościwyniki
wnarzędziachwykrywaniabłędów.
Narzędziazarządzaniapamięcią
Odśmiecaniepamięci(garbagecollectionGC)toinnydoskonałyprzykład
nieuniknionegokompromisumiędzywydajnościąapołączeniemłatwościpro-
gramowaniainiezawodnościprogramu.Automatycznezarządzaniepamięcią
zamazujewszelkiebłędyzarządzaniapamięcią(czylinwyciekipamięci”),które
głównymźródłemproblemówwprogramachpisanychwCiC++.Opra-
cowanorozmaitenarzędziapomagającewwyszukiwaniubłędówzarządzania
pamięcią.NaprzykładPurifyjestszerokoużywanymnarzędziemdynamicznie
wychwytującymbłędyzarządzaniapamięcią,gdytylkowystąpią.Istniejąteż
narzędzia,którepomagająstatycznieidentyfikowaćniektóreztakichproblemów.
1.G.Podstawyjęzykówprogramowania
Wtejczęścizajmiemysięnajważniejsząterminologiąirozróżnieniami,które
występująwstudiachnadjęzykamiprogramowania.Niejestnaszymcelem
omawianiewszystkichkoncepcjianiwszystkichpopularnychjęzykówprogramo-
wania.Zakładamy,żeCzytelnikznaprzynajmniejjedenjęzykspośródnwielkiej
czwórki”C,C++,C#lubJavaabyćmożezetknąłsięrównieżzinnymi
językami.