Serbestberdana ControlFlag 1.0, amûrek ji bo naskirina xeletiyên di koda C de

Intel yekem serbestberdana sereke ya amûra ControlFlag 1.0 weşand, ku destûrê dide te ku hûn bi karanîna pergalek fêrbûna makîneyê ya ku li ser hejmareke mezin ji kodên heyî hatine perwerde kirin, xeletî û anomaliyên di koda çavkaniyê de nas bikin. Berevajî analîzkerên statîk ên kevneşopî, ControlFlag qaîdeyên amade bicîh nayîne, ku tê de peydakirina hemî vebijarkên gengaz dijwar e, lê li ser bingeha statîstîkên li ser karanîna avahîyên zimanên cihêreng di hejmareke mezin ji projeyên heyî de ye. Koda ControlFlag bi C ++-ê hatî nivîsandin û di bin lîsansa MIT de vekirî ye.

Pergal bi avakirina modelek statîstîkî ya rêzika koda heyî ya projeyên çavkaniya vekirî ya ku di GitHub û depoyên gelemperî yên mîna wan de hatine weşandin ve tê perwerde kirin. Di qonaxa perwerdehiyê de, pergal ji bo avakirina strukturên di kodê de qalibên tîpîk destnîşan dike û dara hevoksaziyê ya girêdanên di navbera van nimûneyan de ava dike, ku herikîna pêkanîna kodê di bernameyê de nîşan dide. Wekî encamek, dara biryargirtinê ya referansê pêk tê ku ezmûna pêşkeftinê ya hemî kodên çavkaniyê yên analîzkirî berhev dike. Koda di bin çavdêriyê de pêvajoyek wekhev a nasîna qalibên ku li hember dara biryara referansê têne kontrol kirin derbas dibe. Nakokiyên mezin bi şaxên cîran re hebûna anomalî di nimûneya ku têne kontrol kirin de destnîşan dikin.

Serbestberdana ControlFlag 1.0, amûrek ji bo naskirina xeletiyên di koda C de

Wekî mînakek kapasîteyên ControlFlag, pêşdebiran kodên çavkaniyê yên projeyên OpenSSL û cURL analîz kirin:

  • Çêkirinên anormal “(s1 == NULL) ∧ (s2 == NULL)” û “(s1 == NULL) | (s2 == NULL)" , ku bi qalibê ku bi gelemperî tê bikar anîn li hev nakin "(s1 == NULL) || (s2 == NULL)". Her weha kodê di bêjeyên "(-2 == rv)" de (minus xeletiyek tîpî bû) û "BIO_puts(bp, ":") <= 0)" (di çarçoveya kontrolkirina serketîbûna serketî de) de anomalî destnîşan kir. fonksiyon divê ew "== 0" bûya).
  • Di cURL de, xeletiyek hat kifş kirin ku dema ku hêmana avahiyê "s->keepon" bikar tîne, ku xwediyê celebek hejmarî bû, ji hêla analîzkerên statîk ve nehat tespît kirin, lê bi nirxa boolean TRUE re hate berhev kirin.

Di nav taybetmendiyên guhertoya ControlFlag 1.0 de, ji bo şablonên standard ên ji bo zimanê C-yê û şiyana tespîtkirina anomaliyan di bêjeyên şertî "heke" de piştgirîyek bêkêmasî heye. Mînakî, dema analîzkirina perçeya kodê "heke (x = 7) y = x;" Pergal dê diyar bike ku daxuyaniya "heke" bi gelemperî avakirina "guhêrbar == hejmar" bikar tîne da ku nirxên hejmarî bide ber hev, ji ber vê yekê pir îhtîmal e ku "guhêrbar = jimar" di îfadeya "heke" de ji ber xeletiyek tîpî be. Kit skrîptek vedihewîne ku dihêle hûn depoyên zimanê C yên heyî li ser GitHub dakêşin û wan ji bo avakirina modelê bikar bînin. Modelên amade jî hene, ku dihêle hûn tavilê dest bi kontrolkirina kodê bikin.

Source: opennet.ru

Add a comment