Intel yakavhura iyo ControlFlag muchina yekudzidza system kodhi yekuona tsikidzi mukodhi

Intel yakawana zviitiko zvine chekuita neiyo ControlFlag yekutsvagisa chirongwa chakanangana nekugadzira muchina wekudzidza sisitimu yekuvandudza kodhi mhando. Iyo kiti yezvishandiso yakagadzirirwa nepurojekiti inobvumira, zvichibva pamuenzaniso wakadzidziswa pane yakakura kodhi iripo, kuona zvikanganiso zvakasiyana uye anomalies muzvinyorwa zvinyorwa zvakanyorwa mumitauro yepamusoro-soro seC / C ++. Iyo sisitimu yakakodzera kuona akasiyana marudzi ematambudziko mukodhi, kubva pakuona typos uye isiriyo mhando musanganiswa, kusvika pakuona kushaikwa NULL kukosha kwekutarisa mune anonongedzera uye nekurangarira matambudziko. Iyo ControlFlag kodhi yakanyorwa muC ++ uye yakavhurika yakavharwa pasi peMIT rezinesi.

Iyo sisitimu inodzidzira wega nekuvaka iyo nhamba yemhando yeiyo iripo kodhi rondedzero yeakavhurika mapurojekiti akaburitswa muGitHub uye akafanana neruzhinji repositori. Padanho rekudzidzira, sisitimu inotarisisa maitiro akajairika ekuvaka zvimiro mukodhi uye inovaka muti we syntactic wekubatanidza pakati peaya mapatani, ichiratidza kuyerera kwekodhi kuuraya muchirongwa. Nekuda kweizvozvo, muti wekuita sarudzo unoumbwa unosanganisa ruzivo rwebudiriro yeese akaongororwa masosi macode.

Iyo kodhi iri kuongororwa inoenda nenzira yakafanana yekuziva mapatani anotariswa achipesana nemuti wesarudzo. Kusawirirana kukuru nemapazi akavakidzana kunoratidza kuvapo kweanomaly patani iri kuongororwa. Iyo sisitimu zvakare inobvumidza iwe kwete chete kuona kukanganisa mutemplate, asiwo kupa zano rekugadzirisa. Semuenzaniso, muOpenSSL kodhi, chivakwa "(s1 == NULL) ∧ (s2 == NULL)" chakaonekwa, chakaonekwa mumuti we syntax ka8 chete, nepo bazi repedyo rine kukosha "(s1 == NULL) || (s2 == NULL)” yakaitika kanenge zviuru zvinomwe. Iyo sisitimu yakaonawo anomaly β€œ(s7 == NULL) | (s1 == NULL)” iyo yakaonekwa ka2 mumuti.

Intel yakavhura iyo ControlFlag muchina yekudzidza system kodhi yekuona tsikidzi mukodhi

Kana uchiongorora chidimbu chekodhi "kana (x = 7) y = x;" Sisitimu yaona kuti "variable == number" kuvaka kunowanzo shandiswa mu "kana" mushandisi kuenzanisa nhamba dzenhamba, saka zvinogoneka zvikuru kuti chiratidzo "variable = nhamba" mu "kana" kutaura kunokonzerwa ne typo. Traditional static analyzers vangadai vakabata kukanganisa kwakadaro, asi kusiyana navo, ControlFlag haishandisi mitemo yakagadzirwa, iyo yakaoma kupa zvose zvingasarudzwa, asi inobva pahuwandu hwekushandiswa kwezvivakwa zvakasiyana-siyana muhuwandu hukuru. yemapurojekiti.

Sechiyedzo, uchishandisa ControlFlag mune kodhi kodhi ye cURL utility, iyo inowanzotaurwa semuenzaniso wemhando yepamusoro uye yakaedzwa kodhi, chikanganiso chisina kuoneka ne static analyzers chakaonekwa pachishandisa chimiro chechimiro "s-> chengeta", iyo yaive nenhamba yemhando, asi yakaenzaniswa neBoolean value TRUE . Mune kodhi yeOpenSSL, mukuwedzera kune dambudziko rataurwa pamusoro ne "(s1 == NULL) ∧ (s2 == NULL)", anomalies akaonekwa zvakare muzvirevo "(-2 == rv)" (iyo minus yaive. a typo) uye "BIO_puts(bp, ":")

Source: opennet.ru

Voeg