Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
26
ROZDZIAŁ1.WPROWADZENIE
Problemodszukaniawszystkichbłędówwprogramiejestnierozstrzygalny.
Analizaprzepływudanychmożeostrzegaćprogramistówowszystkichmożli-
wychinstrukcjachmogącychgenerowaćokreślonekategoriebłędów.Jednakjeśli
większośćztychostrzeżeńbędziefałszywymialarmami,użytkownicyniebędą
używaćtakiegonarzędzia.Stądpraktycznedetektorybłędównajczęściejnie
anidokładne,anikompletne.Innymisłowy,mogąonenieznaleźćwszystkich
błędówwprogramieiniemagwarancji,żeraportowanebłędyrzeczywistymi
błędami.Niemniejjednakrozwiniętorozmaiteanalizystatyczneipokazałyone
swojąskutecznośćwwyszukiwaniubłędówwrzeczywistychprogramach,takich
jakdereferencjedopustychlubzwolnionychwskaźników.Fakt,żedetektory
błędówmogąbyćniedokładne,sprawia,żezasadniczoróżniąsięodoptymali-
zacji.Optymalizatormusizachowywaćsiękonserwatywnieiniemożezmienić
semantykiprogramuwżadnychokolicznościach.
Wceludopełnieniategopodrozdziałunależywspomniećwielesposobów,któ-
rymianalizaprogramów,opartanatechnikachwynalezionychoryginalniewcelu
optymalizowaniakoduwkompilatorach,poprawiławydajnośćoprogramowania.
Szczególnieważnetechniki,którepotrafiąstatyczniewykryćpotencjalną
podatnośćzabezpieczeńwprogramie.
Sprawdzanietypów
Sprawdzaniezgodnościtypówjestefektywnąidobrzeugruntowanątechniką
wyłapywanianiespójnościwprogramach.Możezostaćużytedowychwytywania
błędów,naprzykładwtedy,gdyoperacjazostaniezastosowanawobecobiektu
niewłaściwegotypulubgdyparametryprzekazanedoproceduryniepasują
dosygnaturytejprocedury.Analizaprogramumożepójśćjeszczedalejwwy-
krywaniubłędówtypowaniaprzezanalizęprzepływudanychprzezprogram.
Naprzykładjeślidowskaźnikaprzypiszemynull,poczymnatychmiastsiędo
niegoodwołamy,tobezwątpieniamamydoczynieniazbłędem.
Tejsamejtechnologiimożnaużyćdowykrywaniarozmaitychlukzabezpie-
czeń,dziękiktórymatakującydostarczałańcuchznakówlubinnedane,które
nieostrożniewykorzystywaneprzezprogram.Łańcuchdostarczanyprzez
użytkownikamożezostaćopatrzonyetykietątypunniebezpieczny”.Jeśliten
łańcuchniezostaniesprawdzonypodkątemwłaściwegoformatu,pozostaje
nniebezpieczny”,ajeślitakitekstjestwstaniewpływaćnasterowanieprzepły-
wemkoduwjakimśpunkcieprogramu,wówczasjesttopotencjalnasłabość
zabezpieczeń.
Sprawdzaniegranic
Łatwiejszejestpopełnianiebłędów,gdyprogramujesięwjęzykuniższego
poziomu,niżwjęzykachwyższychpoziomów.Naprzykładwielewłamańiluk
zabezpieczeńwsystemachpowodowanychjestprzezprzepełnieniabufora
wprogramachnapisanychwC.PonieważjęzykCniezawierawbudowanego