Код каталарын аныктоо үчүн Intel ачык булактуу ControlFlag машина үйрөнүү системасы

Intel коддун сапатын жакшыртуу үчүн машинаны үйрөнүү системасын түзүүгө багытталган ControlFlag изилдөө долбооруна байланыштуу иштеп чыгууларды тапты. Долбоор тарабынан даярдалган инструменттер топтому бар болгон коддун чоң көлөмү боюнча үйрөтүлгөн моделдин негизинде C/C++ сыяктуу жогорку деңгээлдеги тилдерде жазылган баштапкы тексттердеги ар кандай каталарды жана аномалияларды аныктоого мүмкүндүк берет. Система коддогу көйгөйлөрдүн ар кандай түрлөрүн аныктоо үчүн ылайыктуу, каталарды жана туура эмес типтердин айкалыштарын аныктоодон баштап көрсөткүчтөрдөгү NULL маанисин текшерүүлөрдү жана эс тутум көйгөйлөрүн аныктоого чейин. ControlFlag коду C++ тилинде жазылган жана MIT лицензиясы боюнча ачык булак болуп саналат.

Система GitHub жана ушул сыяктуу коомдук репозиторийлерде жарыяланган ачык булактуу долбоорлордун учурдагы коддук массивинин статистикалык моделин түзүү аркылуу өз алдынча үйрөнөт. Окутуу стадиясында система коддогу структураларды куруунун типтүү үлгүлөрүн аныктайт жана программадагы коддун аткарылышын чагылдырган бул калыптардын ортосундагы байланыштардын синтаксистик дарагын курат. Натыйжада, бардык талданган баштапкы коддордун иштеп чыгуу тажрыйбасын бириктирген маалымдама чечимдерди кабыл алуу дарагы түзүлөт.

Каралып жаткан код үлгүлөрдү аныктоонун окшош процессинен өтөт, алар шилтеме чечим дарагына каршы текшерилет. Коңшу бутактар ​​менен чоң айырмачылыктар текшерилип жаткан үлгүдөгү аномалиянын бар экенин көрсөтүп турат. Система ошондой эле шаблондогу катаны аныктоого гана эмес, оңдоону сунуштоого да мүмкүндүк берет. Мисалы, OpenSSL кодунда “(s1 == NULL) ∧ (s2 == NULL)” конструкциясы аныкталган, ал синтаксис дарагында 8 жолу гана пайда болгон, ал эми эң жакын бутак болсо “(s1 ==) маанисине ээ. NULL) || (s2 == NULL)” 7 миңге жакын жолу болгон. Система ошондой эле аномалияны аныктады “(s1 == NULL) | (s2 == NULL)” даракта 32 жолу пайда болгон.

Код каталарын аныктоо үчүн Intel ачык булактуу ControlFlag машина үйрөнүү системасы

Код фрагментин талдоодо “if (x = 7) y = x;” Система "variable == number" конструкциясы адатта "if" операторунда сандык маанилерди салыштыруу үчүн колдонулаарын аныктады, ошондуктан "if" туюнтмасындагы "variable = number" көрсөткүчү ката. Салттуу статикалык анализаторлор мындай катаны байкамак, бирок алардан айырмаланып, ControlFlag даяр эрежелерди колдонбойт, мында бардык мүмкүн болгон варианттарды берүү кыйын, бирок көп сандагы ар кандай структураларды колдонуу статистикасына негизделген. долбоорлордун.

Эксперимент катары, cURL утилитасынын баштапкы кодунда ControlFlagди колдонуу менен, ал көбүнчө жогорку сапаттагы жана текшерилген коддун мисалы катары келтирилип, “s->keepon” структуралык элементин колдонууда статикалык анализаторлор тарабынан аныкталбаган ката аныкталган. анын сандык түрү бар, бирок буль мааниси TRUE менен салыштырылган. OpenSSL кодунда жогоруда айтылган "(s1 == NULL) ∧ (s2 == NULL)" көйгөйүнөн тышкары, "(-2 == rv)" туюнтмаларында да аномалиялар аныкталган (минус ката) жана "BIO_puts(bp, ":")

Source: opennet.ru

Комментарий кошуу