Нашри ControlFlag 1.0, асбоб барои муайян кардани хатогиҳо дар рамзи C

Intel аввалин нашри асосии абзори ControlFlag 1.0-ро нашр кард, ки ба шумо имкон медиҳад хатоҳо ва аномалияҳоро дар коди сарчашма бо истифода аз системаи омӯзиши мошинсозӣ, ки дар миқдори зиёди коди мавҷуда таълим дода шудааст, муайян кунед. Баръакси анализаторҳои анъанавии статикӣ, ControlFlag қоидаҳои тайёрро истифода намебарад, ки дар он пешниҳоди ҳамаи вариантҳои имконпазир душвор аст, аммо ба омор оид ба истифодаи сохторҳои гуногуни забонӣ дар шумораи зиёди лоиҳаҳои мавҷуда асос ёфтааст. Рамзи ControlFlag дар C++ навишта шудааст ва аз рӯи иҷозатномаи MIT кушода аст.

Система тавассути сохтани модели омории маҷмӯи кодҳои мавҷудаи лоиҳаҳои кушодаасос, ки дар GitHub ва анборҳои шабеҳи ҷамъиятӣ нашр шудаанд, таълим дода мешавад. Дар марҳилаи омӯзиш, система намунаҳои маъмулии сохтани сохторҳоро дар код муайян мекунад ва дарахти синтаксиси робитаҳои байни ин қолабҳоро месозад, ки ҷараёни иҷрои кодро дар барнома инъикос мекунад. Дар натиҷа, дарахти истинод барои қабули қарорҳо ташаккул меёбад, ки таҷрибаи таҳияи ҳама рамзҳои сарчашмаҳои таҳлилшударо муттаҳид мекунад. Рамзи баррасишаванда аз раванди шабеҳи муайян кардани намунаҳое мегузарад, ки дар муқобили дарахти қарори истинод тафтиш карда мешаванд. Тафовутҳои калон бо шохаҳои ҳамсоя мавҷудияти аномалия дар намунаи тафтишшавандаро нишон медиҳанд.

Нашри ControlFlag 1.0, асбоб барои муайян кардани хатогиҳо дар рамзи C

Ҳамчун намунаи қобилиятҳои 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", ки навъи ададӣ дошт, ошкор накарданд, вале бо арзиши мантиқии TRUE муқоиса карда шуд.

Дар байни хусусиятҳои версияи ControlFlag 1.0, дастгирии пурраи қолибҳои стандартии забони C ва қобилияти ошкор кардани аномалияҳо дар ибораҳои шартии "агар" мавҷуд аст. Масалан, ҳангоми таҳлили фрагменти код "агар (x = 7) y = x;" Система муайян мекунад, ки изҳороти "агар" одатан барои муқоисаи арзишҳои ададӣ сохтори "тағйирёбанда == рақам" -ро истифода мебарад, аз ин рӯ эҳтимоли зиёд дорад, ки "тағйирёбанда = рақам" дар ифодаи "агар" аз хатогии хаттӣ ба вуҷуд омадааст. Маҷмӯа скриптро дар бар мегирад, ки ба шумо имкон медиҳад репозиторийҳои мавҷудаи забони C-ро дар GitHub зеркашӣ кунед ва онҳоро барои сохтани модел истифода баред. Моделҳои тайёр низ мавҷуданд, ки ба шумо имкон медиҳанд, ки фавран тафтиши кодро оғоз кунед.

Манбаъ: opennet.ru

Илова Эзоҳ