Intel qhib qhov chaw ControlFlag tshuab kev kawm system los txheeb xyuas cov lej yuam kev

Intel tau tshawb pom cov kev txhim kho ntsig txog kev tshawb fawb ControlFlag txhawm rau tsim lub tshuab kev kawm los txhim kho cov lej zoo. Cov cuab yeej npaj los ntawm qhov project tso cai, raws li tus qauv uas tau kawm ntau ntawm cov cai uas twb muaj lawm, txhawm rau txheeb xyuas ntau yam tsis raug thiab tsis txaus ntseeg hauv cov ntawv sau hauv cov lus siab xws li C / C ++. Lub kaw lus tsim nyog rau kev txheeb xyuas ntau yam teeb meem hauv cov cai, los ntawm kev txheeb xyuas cov typos thiab tsis raug hom kev sib xyaw ua ke, txhawm rau txheeb xyuas cov nqi NULL uas ploj lawm hauv cov taw qhia thiab teeb meem nco. ControlFlag code yog sau rau hauv C ++ thiab yog qhib los ntawm MIT daim ntawv tso cai.

Lub kaw lus yog kev kawm tus kheej los ntawm kev tsim cov qauv kev txheeb cais ntawm cov lej uas twb muaj lawm ntawm cov haujlwm qhib tau tshaj tawm hauv GitHub thiab cov chaw khaws ntaub ntawv pej xeem zoo sib xws. Nyob rau theem kev cob qhia, lub kaw lus txiav txim siab cov qauv tsim rau kev tsim cov qauv hauv cov cai thiab tsim ib tsob ntoo syntactic ntawm kev sib txuas ntawm cov qauv no, uas qhia txog kev khiav ntawm cov lej ua haujlwm hauv qhov program. Raws li qhov tshwm sim, ib tsob ntoo txiav txim siab siv tau raug tsim los ua ke nrog kev txhim kho ntawm txhua qhov kev txheeb xyuas cov lej.

Txoj cai nyob rau hauv kev tshuaj xyuas tau dhau los ua cov txheej txheem zoo sib xws ntawm kev txheeb xyuas cov qauv uas raug tshuaj xyuas tawm tsam cov ntoo txiav txim siab siv. Qhov sib txawv loj nrog cov ceg nyob sib ze qhia tau tias muaj qhov tsis sib xws hauv cov qauv raug kuaj xyuas. Lub kaw lus kuj tso cai rau koj tsis tsuas yog txheeb xyuas qhov yuam kev hauv cov qauv, tab sis kuj qhia txog kev kho. Piv txwv li, hauv OpenSSL code, kev tsim kho "(s1 == NULL) ∧ (s2 == NULL)" raug txheeb xyuas, uas tau tshwm sim hauv tsob ntoo syntax tsuas yog 8 zaug, thaum cov ceg ze tshaj nrog tus nqi "(s1 == NULL) || (s2 == NULL)” tshwm sim txog 7 txhiab zaus. Lub kaw lus kuj tau kuaj pom qhov tsis txaus ntseeg β€œ(s1 == NULL) | (s2 == NULL)” uas tau tshwm sim 32 zaug hauv tsob ntoo.

Intel qhib qhov chaw ControlFlag tshuab kev kawm system los txheeb xyuas cov lej yuam kev

Thaum txheeb xyuas cov kab lus "yog (x = 7) y = x;" Lub kaw lus tau txiav txim siab tias "kuj hloov pauv == tus lej" kev tsim kho feem ntau yog siv hauv "yog" tus neeg teb xov tooj los piv cov lej, yog li nws muaj feem ntau tias qhov qhia tau tias "hloov pauv = tus lej" hauv "yog" qhia los ntawm ib qho typo. Traditional static analyzers yuav tau ntes xws li qhov yuam kev, tab sis tsis zoo li lawv, ControlFlag tsis siv cov kev cai npaj txhij, uas nws nyuaj rau muab rau txhua qhov kev xaiv tau, tab sis yog raws li kev txheeb cais ntawm kev siv ntau yam qauv hauv ntau tus lej. ntawm tej yaam num.

Raws li kev sim, siv ControlFlag nyob rau hauv lub hauv paus code ntawm lub cURL utility, uas yog feem ntau raug suav hais tias yog ib tug piv txwv ntawm high-zoo thiab xeem code, ib qho kev ua yuam kev undetected los ntawm static analyzers tau txheeb xyuas thaum siv cov txheej txheem "s->keepon", uas muaj ib hom lej, tab sis tau muab piv nrog tus nqi Boolean TRUE . Hauv OpenSSL code, ntxiv rau qhov teeb meem uas tau hais los saum toj no nrog "(s1 == NULL) ∧ (s2 == NULL)", qhov tsis txaus ntseeg kuj tau txheeb xyuas hauv cov kab lus "(-2 == rv)" (qhov rho tawm yog typo) thiab "BIO_puts(bp, ":")

Tau qhov twg los: opennet.ru

Ntxiv ib saib