ControlFlag 1.0 kaleratzea, C kodean akatsak identifikatzeko tresna

Intel-ek ControlFlag 1.0 tresnaren lehen bertsio nagusia argitaratu du, iturburu-kodean akatsak eta anomaliak identifikatzea ahalbidetzen duena, lehendik dagoen kode kopuru handi batean trebatutako ikaskuntza automatikoko sistema bat erabiliz. Analizatzaile estatiko tradizionalek ez bezala, ControlFlag-ek ez ditu prest egindako arauak aplikatzen, zeinetan zaila baita aukera posible guztiak eskaintzea, baina lehendik dauden proiektu ugaritan hainbat hizkuntza-eraikuntzaren erabilerari buruzko estatistiketan oinarritzen da. ControlFlag kodea C++-n idatzita dago eta kode irekian dago MIT lizentziapean.

GitHub-en eta antzeko biltegi publikoetan argitaratutako kode irekiko proiektuen lehendik dagoen kode-matrizearen eredu estatistiko bat eraikiz trebatzen da sistema. Prestakuntza-etapan, sistemak kodean egiturak eraikitzeko eredu tipikoak zehazten ditu eta eredu horien arteko konexioen zuhaitz sintaktiko bat eraikitzen du, programan kodearen exekuzio-fluxua islatuz. Ondorioz, aztertutako iturburu-kode guztien garapen-esperientzia batzen duen erreferentziazko erabakiak hartzeko zuhaitza eratzen da. Berrikusten ari den kodeak erreferentziazko erabaki-zuhaitz batekin egiaztatzen diren ereduak identifikatzeko antzeko prozesu bat jasaten du. Alboko adarrekiko desadostasun handiek egiaztatzen ari den ereduan anomalia bat dagoela adierazten dute.

ControlFlag 1.0 kaleratzea, C kodean akatsak identifikatzeko tresna

ControlFlag-en gaitasunen adibide gisa, garatzaileek OpenSSL eta cURL proiektuen iturburu-kodeak aztertu zituzten:

  • Eraikuntza anomaliak β€œ(s1 == NULL) ∧ (s2 == NULL)” eta β€œ(s1 == NULL) | (s2 == NULL)" , normalean erabiltzen den ereduarekin bat ez datozenak "(s1 == NULL) || (s2 == NULL)". Kodeak anomaliak ere identifikatu zituen "(-2 == rv)" (minusak akatsa izan zen) eta "BIO_puts(bp, ":") <= 0)" esamoldeetan (gutxienez amaitu izana egiaztatzeko testuinguruan). funtzioa "== 0") izan behar zuen.
  • cURL-en, analizatzaile estatikoek detektatu ez zuten errore bat aurkitu zen "s->keepon" egitura-elementua erabiltzean, zenbakizko mota zuena, baina TRUE balio boolearrarekin alderatu zen.

ControlFlag 1.0 bertsioaren ezaugarrien artean, C hizkuntzarako txantiloi estandarentzako laguntza osoa dago eta baldintzazko "baldin" adierazpenetan anomaliak detektatzeko gaitasuna. Esate baterako, kode zatia aztertzean β€œif (x = 7) y = x;” Sistemak zehaztuko du "baldin" adierazpenak normalean "aldagaia == zenbakia" eraikuntza erabiltzen duela zenbakizko balioak alderatzeko, beraz, oso litekeena da "bada" esapideko "aldagaia = zenbakia" akats baten ondorioz egotea. Kitak GitHub-en dauden C hizkuntzaren biltegiak deskargatzeko eta eredua eraikitzeko erabiltzeko aukera ematen duen script bat dakar. Prestatutako ereduak ere eskuragarri daude, kodea egiaztatzen berehala hasteko.

Iturria: opennet.ru

Gehitu iruzkin berria