D'oscail Intel cód an chórais foghlama meaisín ControlFlag chun fabhtanna sa chód a aithint

D'aimsigh Intel forbairtí a bhaineann leis an tionscadal taighde ControlFlag, atá dírithe ar chóras foghlama meaisín a chruthú chun cáilíocht cód a fheabhsú. Ceadaíonn an fhoireann uirlisí a d’ullmhaigh an tionscadal, bunaithe ar mhúnla atá oilte ar líon mór cód atá ann cheana féin, earráidí agus aimhrialtachtaí éagsúla a bhrath i dtéacsanna foinseacha atá scríofa i dteangacha ardleibhéil amhail C/C++. Tá an córas oiriúnach chun cineálacha éagsúla fadhbanna sa chód a aithint, ó chlóscríobhanna agus teaglaim de chineál mícheart a bhrath, go dtí seiceálacha NULL a cailleadh ar threo agus fadhbanna cuimhne a bhrath. Tá an cód ControlFlag scríofa i C++ agus is foinse oscailte é faoin gceadúnas MIT.

Tá an córas féin-fhoghlama trí mhúnla staitistiúil a thógáil den tsraith cód reatha de thionscadail oscailte a foilsíodh in GitHub agus stórtha poiblí comhchosúla. Ag an gcéim foghlama, cinneann an córas patrúin tipiciúla chun struchtúir a thógáil sa chód agus tógann sé crann comhréire de naisc idir na patrúin seo, rud a léiríonn sreabhadh forghníomhaithe an chóid sa chlár. Mar thoradh air sin, cruthaítear crann cinnteoireachta tagartha a chomhcheanglaíonn an taithí ar na buntéacsanna anailíse go léir a fhorbairt.

Téann an cód atá á thástáil trí phróiseas comhchosúil chun patrúin a aithint a sheiceáiltear i gcoinne crann cinnteoireachta tagartha. Léiríonn neamhréireachtaí móra le brainsí comharsanacha láithreacht aimhrialtacht sa teimpléad atá á sheiceáil. Ceadaíonn an córas freisin ní hamháin earráid a aithint sa teimpléad, ach freisin ceartú a mholadh. Mar shampla, sa chód OpenSSL, fuarthas an tógáil “(s1 == NULL) ∧ (s2 == NULL)”, nár tharla ach 8 n-uaire sa chrann comhréire, agus an brainse is gaire leis an luach “(s1 == NULLComment) || (s2 == NULLComment)" tharla thart ar 7 míle uair. Bhraith an córas freisin aimhrialtacht “(s1 == NULL) | (s2 == NULLComment)" a tharla 32 uair sa chrann.

D'oscail Intel cód an chórais foghlama meaisín ControlFlag chun fabhtanna sa chód a aithint

Agus an blúire cód á pharsáil "má tá (x = 7) y = x;" tá sé socraithe ag an gcóras go n-úsáidtear an tógáil “athróg == uimhir” de ghnáth sa ráiteas “má” chun luachanna uimhriúla a chur i gcomparáid, mar sin, le dóchúlacht ard, is é is cúis leis an tásc “athraitheach = uimhir” sa slonn “má”. clóscríobhán. Ghlacfadh anailíseoirí statacha traidisiúnta a leithéid de earráid freisin, ach murab ionann agus iad, ní úsáideann ControlFlag rialacha réamhdhéanta ina bhfuil sé deacair gach rogha féideartha a thuar, ach tá sé bunaithe ar an staidreamh maidir le húsáid gach cineál tógála i líon mór de tionscadail.

Mar thurgnamh, ag baint úsáide as ControlFlag i gcód foinse an áirgiúlachta cURL, a luaitear go minic mar shampla de chód ardcháilíochta agus fíoraithe, braitheadh ​​​​earráid nach dtugann anailíseoirí statacha faoi deara agus an eilimint struchtúir "s->coimeád" á úsáid, a raibh cineál uimhriúil ann, ach a cuireadh i gcomparáid leis an luach boolean TRUE . Sa chód OpenSSL, chomh maith leis an bhfadhb thuas le "(s1 == NULL) ∧ (s2 == NULL)", bhí aimhrialtachtaí sna habairtí "(-2 == rv)" freisin (typo a bhí sa lúide ) agus "BIO_puts(bp,":")

Foinse: oscailtenet.ru

Add a comment