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

Kompania Intel publikoi versionin e saj të parë të rëndësishëm të mjetit ControlFlag 1.0, i cili lejon identifikimin e gabimeve dhe anomalive në tekstet burimore, duke përdorur një sistem të mësimit të makinerive të trajnuar mbi një sasi të madhe kodi ekzistues. Ndryshe nga analizatorët tradicionalë statikë, ControlFlag nuk përdor rregulla të gatshme, të cilat është e vështirë të parashikosh të gjitha variantet, dhe mbështetet në statistikat e përdorimit të të gjitha strukturave 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 licensën MIT.

Sistemi mëson duke ndërtuar një model statistik të grupit ekzistues të kodit të projekteve të hapura, të publikuara në GitHub dhe repo të tjera publike të ngjashme. Gjatë fazës së mësimit, sistemi përcakton modelet tipike të ndërtimit të strukturave në kod dhe ndan një pemë sintaksore lidhjesh midis këtyre modeleve, e cila reflekton rrjedhën e ekzekutimit të kodit në program. Në fund krijohet një pemë referimi për marrjen e vendimeve, e cila bashkon eksperiencën e zhvillimit të të gjithë teksteve burimore të analizuara. Për kodin e kontrolluar, një proces i ngjashëm i identifikimit të modeleve kryhet, të cilat krahasohen me pemën referuese për marrjen e vendimeve. Shkëputjet e mëdha nga degët fqinjë tregojnë për ekzistencën e një anomalii në modelin e kontrolluar.

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

Si një shembuj të mundësive të ControlFlag, zhvilluesit morën përsipër të analizojnë tekstet burimore të projekteve OpenSSL dhe cURL:

  • NĂ« OpenSSL u identifikuan konstrukcionet anomale «(s1 == NULL) ∧ (s2 == NULL)» dhe «(s1 == NULL) | (s2 == NULL)», qĂ« nuk pĂ«rputhen me modelin e zakonshĂ«m tĂ« pĂ«rdorur «(s1 == NULL) || (s2 == NULL)». NĂ« kod gjithashtu u zbuluan anomali nĂ« shprehjet «(-2 == rv)» (minus ishte njĂ« gabim shkrimi) dhe «BIO_puts(bp, «:») <= 0)» (nĂ« kontekstin e kontrollit tĂ« pĂ«rfundimit tĂ« suksesshĂ«m tĂ« funksionit duhej tĂ« ishte «== 0»).
  • NĂ« cURL u zbulua njĂ« gabim qĂ« nuk u vĂ«rejt nga analizatorĂ«t statikĂ« gjatĂ« pĂ«rdorimit tĂ« elementit tĂ« strukturĂ«s «s->keepon», i cili kishte tipin numerik, por u krahasua me vlerĂ«n booleane TRUE.

Nga karakteristikat e versionit ControlFlag 1.0 vlen të theksohet mbështetja e plotë për modelet tipike të gjuhës C dhe mundësia e identifikimit të anomalive në shprehjet kushtore «if». Për shembull, gjatë analizës së një fragmenti kodi «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 == numri», prandaj me një probabilitet të madh, caktimi «variabla = numri» në shprehjen «if» përballet me një gabim shkrimi. Një skenar ofrohet për të ngarkuar projektet në gjuhën C që ndodhen në repo GitHub dhe për t'i përdorur ato për ndërtimin e modelit. Gjithashtu, janë në dispozicion modele të gatshme, të cilat lejojnë fillimin e menjëhershëm të kontrollit të kodit.

Burimi: opennet.ru

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