Lëshimi i ControlFlag 1.0, mjetit për identifikimin e gabimeve në kodin në gjuhën C

Kompania Intel publikoi versionin e parĂ« tĂ« konsiderueshĂ«m tĂ« mjetit ControlFlag 1.0, i cili lejon identifikimin e gabimeve dhe anomali nĂ« tekstet burimore, duke pĂ«rdorur njĂ« sistem tĂ« mĂ«simit tĂ« makinerive tĂ« trajnuar mbi njĂ« volum tĂ« madh kodin ekzistues. Ndryshe nga analizatorĂ«t tradicionalĂ« statikĂ«, ControlFlag nuk aplikon rregulla tĂ« gatshme, tĂ« cilat Ă«shtĂ« e vĂ«shtirĂ« t‘i parashikosh tĂ« gjitha variantet e mundshme, por mbĂ«shtetet nĂ« statistikĂ«n e pĂ«rdorimit tĂ« tĂ« gjitha konstrukcioneve gjuhĂ«sore nĂ« njĂ« numĂ«r tĂ« madh projektesh ekzistuese. Kodi i ControlFlag Ă«shtĂ« shkruar nĂ« gjuhĂ«n C++ dhe Ă«shtĂ« i hapur nĂ«n licencĂ«n MIT.

Sistemi mësohet duke ndërtuar një model statistik të grumbullit ekzistues të kodit të projekteve të hapura, të publikuara në GitHub dhe repo publike të ngjashme. Në fazën e mësimit, sistemi identifikon modele tipike të ndërtimit të konstrukcioneve në kod dhe ndalon një pemë sintaksore lidhjesh midis këtyre modeleve, e cila reflekton rrjedhën e ekzekutimit të kodit në program. Në fund formohej një pemë referimi e vendimeve që bashkon përvojën e zhvillimit të të gjitha teksteve burimore të analizuara. Për kodin që po verifikohet, një proces i ngjashëm identifikimi modelet kryhet, të cilat krahasohen me pemën referuese të vendimeve. Diferencat e mëdha me degët e fqinjshme tregojnë për ekzistencën e një anomalie në modelin që po verifikohet.

Lëshimi i ControlFlag 1.0, mjetit për identifikimin e gabimeve në kodin në gjuhën C

Si një shembull i mundësive të ControlFlag, zhvilluesit morën në analizë tekstet burimore të projekteve OpenSSL dhe cURL:

  • NĂ« OpenSSL u identifikuan konstrukcione anomale "(s1 == NULL) ∧ (s2 == NULL)" dhe "(s1 == NULL) | (s2 == NULL)", tĂ« cilat nuk pĂ«rputhen me modelin e zakonshĂ«m tĂ« pĂ«rdorur "(s1 == NULL) || (s2 == NULL)". NĂ« kod gjithashtu u identifikuan anomali nĂ« shprehjet "(-2 == rv)" (minus ishte njĂ« gabim) dhe "BIO_puts(bp, ":") <= 0)" (nĂ« kontekstin e verifikimit tĂ« pĂ«rfundimit tĂ« suksesshĂ«m tĂ« funksionit duhej tĂ« ishte "== 0").
  • NĂ« cURL u identifikua njĂ« gabim i pavĂ«rejtur nga analizatorĂ«t statikĂ« gjatĂ« pĂ«rdorimit tĂ« elementit tĂ« strukturĂ«s "s->keepon", i cili kishte njĂ« tip numerik, por u krahasua me njĂ« vlerĂ« logjike TRUE.

Në veçoritë e versionit ControlFlag 1.0, theksohet mbështetje e plotë për modele tipike të gjuhës C dhe mundësia për të identifikuar anomali në shprehjet kushtore "if". Për shembull, gjatë analizës së fragmentit të kodit "if (x = 7) y = x;", sistemi do të përcaktojë se zakonisht në operatorin "if" për krahasimin e vlerave numerike përdoret struktura "variabla == numër", prandaj me shumë mundësi, tregimi "variabla = numër" në shprehjen "if" është shkaktuar nga një gabim shkrimi. Në paketë ofrohet një skenar që lejon ngarkimin e burimeve të disponueshme në repozitorin GitHub në gjuhën C dhe përdorimin e tyre për ndërtimin e modelit. Gjithashtu, janë të disponueshme modele të gatshme, të cilat lejojnë fillimin e menjëhershëm të kontrollit të kodit.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster