د کوډ غلطیو پیژندلو لپاره د انټیل خلاص سرچینې کنټرول فلګ ماشین زده کړې سیسټم

Intel د ControlFlag څیړنې پروژې پورې اړوند پرمختګونه موندلي چې هدف یې د کوډ کیفیت ښه کولو لپاره د ماشین زده کړې سیسټم رامینځته کول دي. د پروژې لخوا چمتو شوي اوزار کټ د موجوده کوډ په لوی مقدار کې روزل شوي ماډل پراساس اجازه ورکوي چې د سرچینې متنونو کې مختلف غلطۍ او ګډوډي په ګوته کړي چې په لوړه کچه ژبې لکه C/C++ کې لیکل شوي. سیسټم په کوډ کې د مختلف ډوله ستونزو پیژندلو لپاره مناسب دی ، د ټایپونو او غلط ډول ترکیبونو پیژندلو څخه ، په اشارو او حافظې ستونزو کې د ورک شوي NULL ارزښت چیکونو پیژندلو پورې. د کنټرول فلګ کوډ په C++ کې لیکل شوی او د MIT جواز لاندې خلاص سرچینه ده.

سیسټم د GitHub او ورته عامه زیرمو کې خپاره شوي د خلاص پروژو د موجوده کوډ لړۍ احصایوي ماډل رامینځته کولو سره پخپله زده کړه کوي. د روزنې په مرحله کې، سیسټم په کوډ کې د جوړښتونو د جوړولو لپاره ځانګړي نمونې ټاکي او د دې نمونو تر منځ د ارتباط یوه نحوي ونې جوړوي، چې په پروګرام کې د کوډ اجرا کولو جریان منعکس کوي. د پایلې په توګه، د حوالې پریکړه کولو ونې رامینځته کیږي چې د ټولو تحلیل شوي سرچینې کوډونو پراختیا تجربه سره یوځای کوي.

د بیاکتنې لاندې کوډ د نمونو پیژندلو ورته پروسې څخه تیریږي چې د حوالې پریکړې ونې په وړاندې چک شوي. د ګاونډیو څانګو سره لوی توپیرونه په چک شوي نمونه کې د بې نظمۍ شتون په ګوته کوي. سیسټم تاسو ته اجازه درکوي نه یوازې په ټیمپلیټ کې یوه تېروتنه وپیژني، بلکه د سمون وړاندیز هم کوي. د مثال په توګه، د OpenSSL کوډ کې، ساختمان "(s1 == NULL) ∧ (s2 == NULL)" پیژندل شوی، کوم چې د نحو په ونې کې یوازې 8 ځله ښکاره شوی، پداسې حال کې چې د ارزښت سره نږدې څانګه "(s1 ==) NULL) || (s2 == NULL)" شاوخوا 7 زره ځله پیښ شوي. سیسټم هم یو ګډوډي کشف کړه "(s1 == NULL) | (s2 == NULL)" چې په ونه کې 32 ځله څرګند شو.

د کوډ غلطیو پیژندلو لپاره د انټیل خلاص سرچینې کنټرول فلګ ماشین زده کړې سیسټم

کله چې د کوډ ټوټه تحلیل کړئ "که (x = 7) y = x؛" سیسټم دا معلومه کړې چې د "متغیر == شمیره" ساختمان معمولا د "if" آپریټر کې د عددي ارزښتونو پرتله کولو لپاره کارول کیږي، نو دا خورا احتمال لري چې په "که" بیان کې د "متغیر = شمیره" اشاره د یو له امله رامنځته شي. ټایپ دودیز جامد شنونکو به دا ډول تېروتنه نیولې وي، مګر د دوی برعکس، ControlFlag چمتو شوي مقررات نه پلي کوي، په کوم کې چې د ټولو ممکنه اختیارونو چمتو کول ستونزمن دي، مګر په لوی شمیر کې د مختلفو جوړښتونو کارولو احصایې پر بنسټ والړ دی. د پروژو.

د یوې تجربې په توګه، د CURL یوټیلیټ د سرچینې کوډ کې د ControlFlag کارول، کوم چې ډیری وختونه د لوړ کیفیت او آزموینې کوډ د مثال په توګه حواله کیږي، د جامد تحلیل کونکو لخوا کشف شوې تېروتنه په ګوته شوه کله چې د جوړښت عنصر "s->keepon" کاروي، کوم چې عددي ډول درلود، مګر د بولین ارزښت TRUE سره پرتله شوی. په OpenSSL کوډ کې، د "(s1 == NULL) ∧ (s2 == NULL) سره د پورته ذکر شوي ستونزې سربیره، د "(-2 == rv)" بیانونو کې هم ګډوډي پیژندل شوې یو ټایپ) او "BIO_puts(bp, ":")

سرچینه: opennet.ru

Add a comment