C кодын алдааг тодорхойлох хэрэгсэл болох ControlFlag 1.0-ийг гаргалаа

Intel нь одоо байгаа их хэмжээний код дээр бэлтгэгдсэн машин сургалтын системийг ашиглан эх кодын алдаа, гажигийг тодорхойлох боломжийг олгодог ControlFlag 1.0 хэрэгслийн анхны томоохон хувилбарыг нийтлэв. Уламжлалт статик анализаторуудаас ялгаатай нь ControlFlag нь бэлэн дүрмүүдийг ашигладаггүй бөгөөд үүнд бүх боломжит хувилбаруудыг өгөхөд хэцүү байдаг боловч одоо байгаа олон тооны төслүүдэд янз бүрийн хэлний бүтцийг ашиглах статистик дээр суурилдаг. ControlFlag код нь C++ хэл дээр бичигдсэн бөгөөд MIT лицензийн дагуу нээлттэй эх сурвалж юм.

Энэхүү системийг GitHub болон ижил төстэй олон нийтийн мэдээллийн санд нийтэлсэн нээлттэй эхийн төслүүдийн одоо байгаа кодын массивын статистик загварыг бий болгох замаар сургадаг. Сургалтын үе шатанд систем нь код доторх бүтцийг бий болгох ердийн хэв маягийг тодорхойлж, програм дахь кодыг гүйцэтгэх урсгалыг тусгасан эдгээр хэв маягийн хоорондын холболтын синтаксийн модыг бий болгодог. Үүний үр дүнд дүн шинжилгээ хийсэн бүх эх кодын хөгжүүлэлтийн туршлагыг нэгтгэсэн жишиг шийдвэр гаргах мод бий болно. Хянаж буй код нь жишиг шийдвэрийн модтой харьцуулан шалгасан хэв маягийг тодорхойлох ижил төстэй процессыг хэрэгжүүлдэг. Хөрш зэргэлдээ салбаруудтай их хэмжээний зөрүүтэй байгаа нь шалгаж буй загварт гажиг байгааг илтгэнэ.

C кодын алдааг тодорхойлох хэрэгсэл болох ControlFlag 1.0-ийг гаргалаа

ControlFlag-ийн чадавхийн жишээ болгон хөгжүүлэгчид OpenSSL болон cURL төслүүдийн эх кодуудад дүн шинжилгээ хийсэн.

  • Аномал бүтэц “(s1 == NULL) ∧ (s2 == NULL)” болон “(s1 == NULL) | (s2 == NULL)" , нийтлэг хэрэглэгддэг загвартай таарахгүй байна "(s1 == NULL) || (s2 == NULL)". Код нь мөн “(-2 == rv)” (хасах нь үсгийн алдаа байсан) болон “BIO_puts(bp, “:”) <= 0)” (амжилттай дууссан эсэхийг шалгах контекст) илэрхийлэлд гажиг илрүүлсэн. функц нь "== 0" байх ёстой).
  • cURL-д тоон төрөлтэй “s->keepon” бүтцийн элементийг ашиглах үед статик анализаторууд илрүүлээгүй алдааг илрүүлсэн боловч ҮНЭН логикийн утгатай харьцуулсан.

ControlFlag 1.0 хувилбарын онцлог шинж чанаруудын дунд C хэлний стандарт загваруудыг бүрэн дэмждэг бөгөөд нөхцөлт "if" илэрхийлэлд гажиг илрүүлэх боломжтой байдаг. Жишээлбэл, "хэрэв (x = 7) y = x;" кодын фрагментийг шинжлэх үед. Тоон утгуудыг харьцуулахын тулд "хэрэв" хэллэг нь ихэвчлэн "хувьсагч == тоо" бүтцийг ашигладаг болохыг систем тодорхойлох болно, тиймээс "if" илэрхийлэл дэх "хувьсагч = тоо" нь үсгийн алдаанаас үүдэлтэй байх магадлал өндөр байна. Энэхүү иж бүрдэл нь GitHub дээр одоо байгаа Си хэлний репозиторуудыг татаж аваад загвар бүтээхэд ашиглах скриптийг агуулдаг. Мөн бэлэн загварууд байдаг бөгөөд энэ нь кодыг даруй шалгаж эхлэх боломжийг танд олгоно.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх