Tsarin koyan injin sarrafa Flag na Intel don gano kurakuran lamba

Intel ya gano abubuwan ci gaba masu alaƙa da aikin bincike na ControlFlag da nufin ƙirƙirar tsarin koyon injin don haɓaka ingancin lamba. Kayan aikin da aka shirya ta hanyar aikin yana ba da damar, dangane da ƙirar da aka horar akan adadi mai yawa na lambar data kasance, don gano kurakurai daban-daban da rashin daidaituwa a cikin rubutun tushe da aka rubuta cikin manyan harsuna kamar C/C++. Tsarin ya dace don gano nau'ikan matsaloli daban-daban a cikin lamba, daga gano nau'in rubutu da nau'ikan nau'ikan da ba daidai ba, don gano bacewar ƙimar NULL a cikin masu nuni da matsalolin ƙwaƙwalwa. An rubuta lambar ControlFlag a cikin C++ kuma an buɗe ta a ƙarƙashin lasisin MIT.

Tsarin yana koyo da kansa ta hanyar gina ƙirar ƙididdiga na lambar da ke akwai na buɗaɗɗen ayyukan da aka buga a GitHub da makamantan wuraren ajiyar jama'a. A matakin horo, tsarin yana ƙayyade alamu na yau da kullun don gina sifofi a cikin lambar kuma ya gina bishiyar haɗin gwiwa tsakanin waɗannan alamu, yana nuna kwararar aiwatar da code a cikin shirin. A sakamakon haka, an kafa bishiyar yanke shawara wanda ya haɗu da ƙwarewar ci gaba na duk lambobin tushe da aka bincika.

Lambar da ake dubawa tana aiwatar da irin wannan tsari na gano alamu waɗanda aka bincika akan bishiyar yanke shawara. Babban bambance-bambance tare da rassan maƙwabta suna nuna kasancewar anomaly a cikin tsarin da ake dubawa. Hakanan tsarin yana ba ku damar gano kuskure a cikin samfuri kawai, amma har ma don bayar da shawarar gyara. Misali, a cikin lambar OpenSSL, an gano ginin “(s1 == NULL) ∧ (s2 == NULL)”, wanda ya bayyana a cikin bishiyar syntax sau 8 kawai, yayin da reshe mafi kusa da darajar “(s1 ==) NULL) || (s2 == NULL)” ya faru kusan sau dubu 7. Hakanan tsarin ya gano wani abu mara kyau “(s1 == NULL) | (s2 == NULL)” wanda ya bayyana sau 32 a cikin bishiyar.

Tsarin koyan injin sarrafa Flag na Intel don gano kurakuran lamba

Lokacin nazarin guntun lambar "idan (x = 7) y = x;" Tsarin ya ƙaddara cewa ana amfani da ginin "mai canzawa = lambar" yawanci a cikin ma'aikacin "idan" don kwatanta ƙimar lambobi, don haka yana yiwuwa alamar "m = lamba" a cikin "idan" magana ta haifar da typo. Masu nazari na al'ada na al'ada sun kama irin wannan kuskuren, amma ba kamar su ba, ControlFlag ba ya amfani da ka'idojin da aka shirya, wanda yana da wuyar samar da duk zaɓuɓɓukan da za a iya amfani da su, amma yana dogara ne akan kididdigar amfani da tsarin daban-daban a cikin adadi mai yawa. na ayyuka.

A matsayin gwaji, ta yin amfani da ControlFlag a cikin lambar tushe na mai amfani na CURL, wanda galibi ana ambatonsa azaman misali na babban inganci da lambar gwadawa, an gano kuskuren da ba a gano shi ta hanyar masu nazari na tsaye ba lokacin amfani da sashin tsarin "s-> kiyaye", wanda ke da nau'in lamba, amma an kwatanta shi da ƙimar Boolean GASKIYA . A cikin lambar OpenSSL, ban da matsalar da aka ambata a sama tare da "(s1 == NULL) ∧ (s2 == NULL)", an kuma gano abubuwan da ba su dace ba a cikin kalmomin "(-2 == rv)" typo) da "BIO_puts(bp, ":")

source: budenet.ru

Add a comment