C කේතයේ දෝෂ හඳුනාගැනීමේ මෙවලමක් වන ControlFlag 1.0 නිකුත් කිරීම

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

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

C කේතයේ දෝෂ හඳුනාගැනීමේ මෙවලමක් වන ControlFlag 1.0 නිකුත් කිරීම

ControlFlag හි හැකියාවන් සඳහා උදාහරණයක් ලෙස, සංවර්ධකයින් OpenSSL සහ cURL ව්‍යාපෘතිවල මූල කේත විශ්ලේෂණය කළහ:

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

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

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

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