Intel විසින් ControlFlag යන්ත්‍ර ඉගෙනුම් පද්ධති කේතය විවෘත කළේ කේතයේ දෝෂ හඳුනාගැනීම සඳහාය

Intel විසින් ControlFlag පර්යේෂණ ව්‍යාපෘතියට අදාළ වර්ධනයන් සොයාගෙන ඇති අතර, කේතවල ගුණාත්මක භාවය වැඩිදියුණු කිරීම සඳහා යන්ත්‍ර ඉගෙනුම් පද්ධතියක් නිර්මාණය කිරීම අරමුණු කර ගෙන ඇත. ව්‍යාපෘතිය විසින් සකස් කරන ලද මෙවලම් කට්ටලය, පවතින කේත විශාල ප්‍රමාණයක් මත පුහුණු කරන ලද ආකෘතියක් මත පදනම්ව, C/C++ වැනි ඉහළ මට්ටමේ භාෂාවලින් ලියන ලද මූලාශ්‍ර පාඨවල විවිධ දෝෂ සහ විෂමතා හඳුනා ගැනීමට ඉඩ සලසයි. ටයිප් සහ වැරදි ආකාරයේ සංයෝජන හඳුනාගැනීමේ සිට, පොයින්ටර් වල මග හැරුණු NULL චෙක්පත් සහ මතක ගැටළු හඳුනාගැනීම දක්වා කේතයේ විවිධ ආකාරයේ ගැටළු හඳුනා ගැනීමට පද්ධතිය සුදුසු වේ. ControlFlag කේතය C++ වලින් ලියා ඇති අතර MIT බලපත්‍රය යටතේ විවෘත මූලාශ්‍රය වේ.

GitHub සහ ඒ හා සමාන පොදු ගබඩාවල ප්‍රකාශිත විවෘත ව්‍යාපෘතිවල පවතින කේත මාලාවේ සංඛ්‍යානමය ආකෘතියක් ගොඩනැගීමෙන් පද්ධතිය ස්වයං-ඉගෙන ගැනීමකි. ඉගෙනුම් අවධියේදී, පද්ධතිය කේතයේ ව්‍යුහයන් තැනීම සඳහා සාමාන්‍ය රටා තීරණය කරන අතර වැඩසටහනේ කේත ක්‍රියාත්මක කිරීමේ ප්‍රවාහය පිළිබිඹු කරන මෙම රටා අතර සම්බන්ධතා වල වාක්‍ය ඛණ්ඩයක් ගොඩනඟයි. එහි ප්‍රතිඵලයක් වශයෙන්, විශ්ලේෂණ කරන ලද සියලුම මූලාශ්‍ර පාඨ සංවර්ධනය කිරීමේ අත්දැකීම් ඒකාබද්ධ කරන සමුද්දේශ තීරණ ගසක් සාදනු ලැබේ.

පරීක්‍ෂා කෙරෙන කේතය යොමු තීරණ ගසකට එරෙහිව පරීක්‍ෂා කරන රටා හඳුනා ගැනීමේ සමාන ක්‍රියාවලියක් හරහා ගමන් කරයි. අසල්වැසි ශාඛා සමඟ විශාල විෂමතා පෙන්නුම් කරන්නේ පරීක්ෂා කරන අච්චුවේ විෂමතාවයක් පවතින බවයි. පද්ධතිය සැකිල්ලේ දෝෂයක් හඳුනා ගැනීමට පමණක් නොව, නිවැරදි කිරීමක් යෝජනා කිරීමට ද ඉඩ සලසයි. උදාහරණයක් ලෙස, OpenSSL කේතයේ, “(s1 == NULL) ∧ (s2 == NULL)” ඉදිකිරීම හමු වූ අතර, එය සින්ටැක්ස් ගසේ 8 වතාවක් පමණක් සිදු වූ අතර, “(s1 == අගය සහිත ආසන්නතම ශාඛාව) NULL) || (s2 == NULL)" 7 දහස් වාරයක් පමණ සිදු විය. පද්ධතිය “(s1 == NULL) | විෂමතාවයක් ද අනාවරණය කර ගන්නා ලදී (s2 == NULL)" එය 32 වතාවක් ගසේ සිදු විය.

Intel විසින් ControlFlag යන්ත්‍ර ඉගෙනුම් පද්ධති කේතය විවෘත කළේ කේතයේ දෝෂ හඳුනාගැනීම සඳහාය

කේත කොටස විග්‍රහ කිරීමේදී "if (x = 7) y = x;" සංඛ්‍යාත්මක අගයන් සංසන්දනය කිරීම සඳහා සාමාන්‍යයෙන් “if” ප්‍රකාශයේ “විචල්‍ය == අංකය” ඉදිකිරීම භාවිතා කරන බව පද්ධතිය තීරණය කර ඇත, එබැවින් ඉහළ සම්භාවිතාවක් සහිතව, “if” ප්‍රකාශනයේ “විචල්‍යය = සංඛ්‍යා” යන ඇඟවීම හේතු වී ඇත්තේ මුද්‍රණ දෝෂයක්. සාම්ප්‍රදායික ස්ථිතික විශ්ලේෂකයින් ද එවැනි දෝෂයක් අල්ලා ගනු ඇත, නමුත් ඒවා මෙන් නොව, ControlFlag සූදානම් කළ නීති භාවිතා නොකරයි, හැකි සෑම විකල්පයක්ම පුරෝකථනය කිරීම දුෂ්කර නමුත් විශාල සංඛ්‍යාවක සියලු වර්ගවල ඉදිකිරීම් භාවිතා කිරීමේ සංඛ්‍යාලේඛන මත පදනම් වේ. ව්යාපෘති.

අත්හදා බැලීමක් ලෙස, උසස් තත්ත්වයේ සහ සත්‍යාපිත කේතයේ උදාහරණයක් ලෙස බොහෝ විට සඳහන් කරන CURL උපයෝගීතාවයේ ප්‍රභව කේතයේ ControlFlag භාවිතා කිරීම, "s->keepon" ව්‍යුහ මූලද්‍රව්‍යය භාවිතා කරන විට ස්ථිතික විශ්ලේෂකයින් විසින් නොදකින ලද දෝෂයක් අනාවරණය විය. සංඛ්‍යාත්මක වර්ගයක් තිබූ නමුත් බූලියන් අගය සමඟ සංසන්දනය කර ඇත TRUE . OpenSSL කේතයෙහි, "(s1 == NULL) ∧ (s2 == NULL)" සමඟ ඇති ඉහත ගැටලුවට අමතරව, "(-2 == rv)" යන ප්‍රකාශනවල ද විෂමතා ඇති විය (අඩුම යතුරු ලියනය දෝෂයකි. ) සහ "BIO_puts(bp, ":")

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න