ControlFlag 1.0 ning chiqarilishi, C kodidagi xatolarni aniqlash vositasi

Intel kompaniyasi ControlFlag 1.0 vositasining birinchi yirik versiyasini nashr etdi, bu sizga katta hajmdagi mavjud kodlar bo‘yicha o‘qitilgan mashinani o‘rganish tizimidan foydalangan holda manba kodidagi xatolar va anomaliyalarni aniqlash imkonini beradi. An'anaviy statik analizatorlardan farqli o'laroq, ControlFlag barcha mumkin bo'lgan variantlarni taqdim etish qiyin bo'lgan tayyor qoidalarni qo'llamaydi, lekin ko'p sonli mavjud loyihalarda turli til konstruksiyalaridan foydalanish statistikasiga asoslanadi. ControlFlag kodi C++ tilida yozilgan va MIT litsenziyasi ostida ochiq manba hisoblanadi.

Tizim GitHub va shunga o'xshash ommaviy omborlarda nashr etilgan ochiq manbali loyihalarning mavjud kodlar majmuasining statistik modelini yaratish orqali o'qitiladi. O'quv bosqichida tizim koddagi tuzilmalarni qurish uchun tipik naqshlarni aniqlaydi va dasturda kodni bajarish oqimini aks ettiruvchi ushbu naqshlar orasidagi bog'lanishlarning sintaktik daraxtini quradi. Natijada, tahlil qilingan barcha manba kodlarini ishlab chiqish tajribasini birlashtirgan ma'lumotnoma qarorlarini qabul qilish daraxti shakllanadi. Ko'rib chiqilayotgan kod namunaviy qarorlar daraxtiga nisbatan tekshiriladigan naqshlarni aniqlashning o'xshash jarayonidan o'tadi. Qo'shni filiallar bilan katta nomuvofiqliklar tekshirilayotgan naqshda anomaliya mavjudligini ko'rsatadi.

ControlFlag 1.0 ning chiqarilishi, C kodidagi xatolarni aniqlash vositasi

ControlFlag imkoniyatlariga misol sifatida ishlab chiquvchilar OpenSSL va cURL loyihalarining manba kodlarini tahlil qilishdi:

  • Anomal konstruksiyalar “(s1 == NULL) ∧ (s2 == NULL)” va “(s1 == NULL) | (s2 == NULL)" , ular tez-tez ishlatiladigan naqshga mos kelmaydi "(s1 == NULL) || (s2 == NULL)". Kod shuningdek, “(-2 == rv)” (minus xato xato edi) va “BIO_puts(bp, “:”) <= 0)” iboralarida anomaliyalarni aniqladi (muvaffaqiyatli bajarilishini tekshirish kontekstida). funktsiya "== 0" bo'lishi kerak edi).
  • cURL da raqamli tipga ega bo'lgan "s->keepon" struktura elementidan foydalanishda statik analizatorlar tomonidan aniqlanmagan xatolik aniqlandi, lekin TRUE mantiqiy qiymati bilan taqqoslandi.

ControlFlag 1.0 versiyasining xususiyatlari orasida C tili uchun standart shablonlarni to'liq qo'llab-quvvatlash va shartli "if" iboralarida anomaliyalarni aniqlash qobiliyati mavjud. Masalan, “agar (x = 7) y = x;” kod fragmentini tahlil qilishda. Tizim "agar" iborasi odatda raqamli qiymatlarni solishtirish uchun "o'zgaruvchi == raqam" konstruktsiyasidan foydalanishini aniqlaydi, shuning uchun "agar" iborasidagi "o'zgaruvchi = raqam" imlo xatosidan kelib chiqqan bo'lishi mumkin. To'plam GitHub-da mavjud C tilidagi omborlarni yuklab olish va ulardan modelni yaratish uchun foydalanish imkonini beruvchi skriptni o'z ichiga oladi. Kodni darhol tekshirishni boshlash imkonini beruvchi tayyor modellar ham mavjud.

Manba: opennet.ru

a Izoh qo'shish