Intel ilifungua msimbo wa mfumo wa kujifunza wa mashine ya ControlFlag ili kutambua hitilafu kwenye msimbo

Intel imegundua maendeleo yanayohusiana na mradi wa utafiti wa ControlFlag unaolenga kuunda mfumo wa kujifunza kwa mashine ili kuboresha ubora wa msimbo. Zana ya zana iliyotayarishwa na mradi inaruhusu, kulingana na modeli iliyofunzwa kwa idadi kubwa ya msimbo uliopo, kutambua makosa na hitilafu mbalimbali katika matini chanzi zilizoandikwa katika lugha za kiwango cha juu kama vile C/C++. Mfumo unafaa kwa kutambua aina mbalimbali za matatizo katika msimbo, kutoka kutambua typos na mchanganyiko wa aina zisizo sahihi, hadi kutambua ukosefu wa ukaguzi wa thamani NULL katika viashiria na matatizo ya kumbukumbu. Nambari ya ControlFlag imeandikwa katika C++ na iko wazi chini ya leseni ya MIT.

Mfumo huu unajisomea kwa kujenga muundo wa takwimu wa safu zilizopo za msimbo wa miradi iliyofunguliwa iliyochapishwa katika GitHub na hazina sawa za umma. Katika hatua ya mafunzo, mfumo huamua mifumo ya kawaida ya kujenga miundo katika kanuni na hujenga mti wa kisintaksia wa miunganisho kati ya mifumo hii, inayoakisi mtiririko wa utekelezaji wa msimbo katika programu. Kwa hivyo, mti wa kufanya maamuzi wa marejeleo huundwa ambao unachanganya uzoefu wa ukuzaji wa misimbo yote ya chanzo iliyochanganuliwa.

Msimbo unaokaguliwa unapitia mchakato sawa wa kutambua ruwaza ambazo hutambulishwa dhidi ya mti wa uamuzi wa marejeleo. Tofauti kubwa na matawi ya jirani zinaonyesha kuwepo kwa hitilafu katika muundo unaoangaliwa. Mfumo pia hukuruhusu sio tu kutambua kosa kwenye kiolezo, lakini pia kupendekeza urekebishaji. Kwa mfano, katika msimbo wa OpenSSL, ujenzi "(s1 == NULL) ∧ (s2 == NULL)" ulitambuliwa, ambao ulionekana kwenye mti wa syntax mara 8 tu, wakati tawi la karibu zaidi na thamani "(s1 == NULL) | (s2 == NULL)” ilitokea takriban mara elfu 7. Mfumo pia uligundua hitilafu β€œ(s1 == NULL) | (s2 == NULL)” ambayo ilionekana mara 32 kwenye mti.

Intel ilifungua msimbo wa mfumo wa kujifunza wa mashine ya ControlFlag ili kutambua hitilafu kwenye msimbo

Wakati wa kuchambua kipande cha nambari "ikiwa (x = 7) y = x;" Mfumo umeamua kuwa muundo wa "kigeu == nambari" kwa kawaida hutumiwa katika opereta "ikiwa" ili kulinganisha thamani za nambari, kwa hivyo kuna uwezekano mkubwa kwamba kiashiria "kigeu = nambari" katika usemi wa "ikiwa" husababishwa na a. chapa. Wachambuzi wa jadi wa tuli wangepata kosa kama hilo, lakini tofauti na wao, ControlFlag haitumii sheria zilizotengenezwa tayari, ambayo ni ngumu kutoa chaguzi zote zinazowezekana, lakini inategemea takwimu za utumiaji wa miundo anuwai kwa idadi kubwa. ya miradi.

Kama jaribio, kwa kutumia ControlFlag katika msimbo wa chanzo wa matumizi ya cURL, ambayo mara nyingi hutajwa kama mfano wa msimbo wa ubora wa juu na uliojaribiwa, hitilafu ambayo haijatambuliwa na vichanganuzi tuli ilitambuliwa wakati wa kutumia kipengele cha muundo "s->keepon", ambayo ilikuwa na aina ya nambari, lakini ililinganishwa na thamani ya Boolean TRUE . Katika msimbo wa OpenSSL, pamoja na tatizo lililotajwa hapo juu la "(s1 == NULL) ∧ (s2 == NULL)", hitilafu pia zilitambuliwa katika misemo "(-2 == rv)" (minus ilikuwa chapa) na "BIO_puts(bp, ":")

Chanzo: opennet.ru

Kuongeza maoni