Rilaxx ta' ControlFlag 1.0, għodda għall-identifikazzjoni ta' żbalji fil-kodiċi C

Intel ippubblikat l-ewwel rilaxx ewlieni tal-għodda ControlFlag 1.0, li tippermettilek tidentifika żbalji u anomaliji fil-kodiċi tas-sors billi tuża sistema ta 'tagħlim tal-magni mħarrġa fuq ammont kbir ta' kodiċi eżistenti. B'differenza mill-analizzaturi statiċi tradizzjonali, ControlFlag ma japplikax regoli lesti, li fihom huwa diffiċli li tipprovdi għall-għażliet kollha possibbli, iżda hija bbażata fuq statistika dwar l-użu ta 'diversi kostruzzjonijiet tal-lingwa f'numru kbir ta' proġetti eżistenti. Il-kodiċi ControlFlag huwa miktub f'C++ u huwa open source taħt il-liċenzja MIT.

Is-sistema hija mħarrġa billi tibni mudell statistiku tal-firxa ta 'kodiċi eżistenti ta' proġetti open-source ppubblikati f'GitHub u repożitorji pubbliċi simili. Fl-istadju tat-taħriġ, is-sistema tiddetermina mudelli tipiċi għall-kostruzzjoni ta 'strutturi fil-kodiċi u tibni siġra sintattika ta' konnessjonijiet bejn dawn ix-xejriet, li tirrifletti l-fluss tal-eżekuzzjoni tal-kodiċi fil-programm. Bħala riżultat, tiġi ffurmata siġra tat-teħid tad-deċiżjonijiet ta 'referenza li tgħaqqad l-esperjenza ta' żvilupp tal-kodiċijiet tas-sors analizzati kollha. Il-kodiċi taħt reviżjoni jgħaddi minn proċess simili ta' identifikazzjoni ta' mudelli li huma kkontrollati ma' siġra ta' deċiżjoni ta' referenza. Diskrepanzi kbar ma 'fergħat ġirien jindikaw il-preżenza ta' anomalija fil-mudell li qed jiġi kkontrollat.

Rilaxx ta' ControlFlag 1.0, għodda għall-identifikazzjoni ta' żbalji fil-kodiċi C

Bħala eżempju tal-kapaċitajiet ta' ControlFlag, l-iżviluppaturi analizzaw il-kodiċi tas-sors tal-proġetti OpenSSL u cURL:

  • Kostruzzjonijiet anomali “(s1 == NULL) ∧ (s2 == NULL)” u “(s1 == NULL) | (s2 == NULL)" , li ma jaqblux mal-mudell użat komunement "(s1 == NULL) || (s2 == NULL)". Il-kodiċi identifika wkoll anomaliji fl-espressjonijiet “(-2 == rv)” (in-nuqqas kien typo) u “BIO_puts(bp, “:”) <= 0)” (fil-kuntest tal-verifika tat-tlestija b’suċċess tal- funzjoni kellha tkun "== 0").
  • F'cURL, ġie skopert żball li ma ġiex skopert minn analizzaturi statiċi meta uża l-element ta 'struttura "s->keepon", li kellu tip numeriku, iżda kien imqabbel mal-valur boolean VERU.

Fost il-karatteristiċi tal-verżjoni ControlFlag 1.0, hemm appoġġ sħiħ għal mudelli standard għal-lingwa C u l-abbiltà li tiskopri anomaliji f'espressjonijiet kondizzjonali "jekk". Per eżempju, meta tanalizza l-framment tal-kodiċi "jekk (x = 7) y = x;" Is-sistema se tiddetermina li d-dikjarazzjoni "jekk" normalment tuża l-kostruzzjoni "varjabbli == numru" biex tqabbel valuri numeriċi, għalhekk huwa probabbli ħafna li l-"varjabbli = numru" fl-espressjoni "jekk" hija kkawżata minn typo. Il-kit jinkludi skript li jippermettilek tniżżel repożitorji eżistenti tal-lingwa C fuq GitHub u tużahom biex tibni l-mudell. Mudelli lesti huma wkoll disponibbli, li jippermettulek tibda immedjatament tiċċekkja l-kodiċi.

Sors: opennet.ru

Żid kumment