Rhyddhau ControlFlag 1.0, offeryn ar gyfer adnabod gwallau yng nghod C

Mae Intel wedi cyhoeddi'r datganiad mawr cyntaf o'r offeryn ControlFlag 1.0, sy'n eich galluogi i nodi gwallau ac anghysondebau yn y cod ffynhonnell gan ddefnyddio system dysgu peiriant sydd wedi'i hyfforddi ar lawer iawn o god presennol. Yn wahanol i ddadansoddwyr sefydlog traddodiadol, nid yw ControlFlag yn cymhwyso rheolau parod, lle mae'n anodd darparu ar gyfer yr holl opsiynau posibl, ond mae'n seiliedig ar ystadegau ar y defnydd o wahanol strwythurau iaith mewn nifer fawr o brosiectau sy'n bodoli eisoes. Mae'r cod ControlFlag wedi'i ysgrifennu yn C++ ac mae'n ffynhonnell agored o dan y drwydded MIT.

Mae'r system wedi'i hyfforddi trwy adeiladu model ystadegol o'r casgliad cod presennol o brosiectau ffynhonnell agored a gyhoeddwyd yn GitHub a storfeydd cyhoeddus tebyg. Yn y cam hyfforddi, mae'r system yn pennu patrymau nodweddiadol ar gyfer adeiladu strwythurau yn y cod ac yn adeiladu coeden gystrawen o gysylltiadau rhwng y patrymau hyn, gan adlewyrchu llif gweithredu cod yn y rhaglen. O ganlyniad, mae coeden gwneud penderfyniadau cyfeirio yn cael ei ffurfio sy'n cyfuno profiad datblygu'r holl godau ffynhonnell a ddadansoddwyd. Mae'r cod sy'n cael ei adolygu yn mynd trwy broses debyg o nodi patrymau sy'n cael eu gwirio yn erbyn coeden penderfyniad cyfeirio. Mae anghysondebau mawr gyda changhennau cyfagos yn dangos presenoldeb anghysondeb yn y patrwm sy'n cael ei wirio.

Rhyddhau ControlFlag 1.0, offeryn ar gyfer adnabod gwallau yng nghod C

Fel enghraifft o alluoedd ControlFlag, dadansoddodd y datblygwyr godau ffynhonnell y prosiectau OpenSSL a cURL:

  • Anomalaidd lluniadau “(s1 == NULL) ∧ (s2 == NULL)” a “(s1 == NULL) | (s2 == NULL)", nad ydynt yn cyfateb i'r patrwm a ddefnyddir yn gyffredin" (s1 == NULL) || (s2 == NULL)". Roedd y cod hefyd yn nodi anghysondebau yn yr ymadroddion “(-2 == rv)” (teip oedd y minws) a “BIO_puts(bp, “:”) <= 0)” (yng nghyd-destun gwirio cwblhad llwyddiannus y swyddogaeth dylai fod wedi bod yn "== 0").
  • Yn cURL, darganfuwyd gwall na chafodd ei ganfod gan ddadansoddwyr statig wrth ddefnyddio'r elfen strwythur “s->keepon”, a oedd â math rhifol, ond a gafodd ei gymharu â'r gwerth boolaidd CYWIR.

Ymhlith nodweddion y fersiwn ControlFlag 1.0, mae cefnogaeth lawn i dempledi safonol ar gyfer yr iaith C a'r gallu i ganfod anghysondebau mewn ymadroddion “os” amodol. Er enghraifft, wrth ddadansoddi'r darn cod "os (x = 7) y = x;" Bydd y system yn pennu bod y datganiad “os” fel arfer yn defnyddio’r lluniad “newidiol == rhif” i gymharu gwerthoedd rhifol, felly mae’n debygol iawn mai teipio sy’n achosi’r “newidyn = rhif” yn yr ymadrodd “os”. Mae'r pecyn yn cynnwys sgript sy'n eich galluogi i lawrlwytho storfeydd iaith C presennol ar GitHub a'u defnyddio i adeiladu'r model. Mae modelau parod hefyd ar gael, sy'n eich galluogi i ddechrau gwirio'r cod ar unwaith.

Ffynhonnell: opennet.ru

Ychwanegu sylw