C குறியீட்டில் உள்ள பிழைகளை கண்டறிவதற்கான ஒரு கருவியான ControlFlag 1.0 வெளியீடு

Intel ஆனது ControlFlag 1.0 கருவியின் முதல் பெரிய வெளியீட்டை வெளியிட்டுள்ளது, இது ஏற்கனவே உள்ள ஒரு பெரிய அளவிலான குறியீட்டில் பயிற்சியளிக்கப்பட்ட இயந்திர கற்றல் முறையைப் பயன்படுத்தி மூலக் குறியீட்டில் உள்ள பிழைகள் மற்றும் முரண்பாடுகளைக் கண்டறிய உங்களை அனுமதிக்கிறது. பாரம்பரிய நிலையான பகுப்பாய்விகளைப் போலல்லாமல், ControlFlag ஆயத்த விதிகளைப் பயன்படுத்தாது, இதில் சாத்தியமான அனைத்து விருப்பங்களையும் வழங்குவது கடினம், ஆனால் தற்போதுள்ள ஏராளமான திட்டங்களில் பல்வேறு மொழி கட்டுமானங்களைப் பயன்படுத்துவதற்கான புள்ளிவிவரங்களை அடிப்படையாகக் கொண்டது. ControlFlag குறியீடு C++ இல் எழுதப்பட்டுள்ளது மற்றும் MIT உரிமத்தின் கீழ் ஓப்பன் சோர்ஸ் செய்யப்படுகிறது.

கிட்ஹப் மற்றும் அதுபோன்ற பொது களஞ்சியங்களில் வெளியிடப்பட்ட திறந்த மூல திட்டங்களின் தற்போதைய குறியீடு வரிசையின் புள்ளிவிவர மாதிரியை உருவாக்குவதன் மூலம் இந்த அமைப்பு பயிற்சியளிக்கப்படுகிறது. பயிற்சி கட்டத்தில், கணினி குறியீட்டில் கட்டமைப்புகளை உருவாக்குவதற்கான பொதுவான வடிவங்களைத் தீர்மானிக்கிறது மற்றும் இந்த வடிவங்களுக்கு இடையே இணைப்புகளின் தொடரியல் மரத்தை உருவாக்குகிறது, இது நிரலில் குறியீடு செயல்படுத்தலின் ஓட்டத்தை பிரதிபலிக்கிறது. இதன் விளைவாக, அனைத்து பகுப்பாய்வு செய்யப்பட்ட மூலக் குறியீடுகளின் வளர்ச்சி அனுபவத்தையும் ஒருங்கிணைத்து ஒரு குறிப்பு முடிவெடுக்கும் மரம் உருவாகிறது. மதிப்பாய்வில் உள்ள குறியீடு, குறிப்பு முடிவு மரத்திற்கு எதிராக சரிபார்க்கப்பட்ட வடிவங்களை அடையாளம் காணும் இதேபோன்ற செயல்முறைக்கு உட்படுகிறது. அண்டை கிளைகளுடன் பெரிய முரண்பாடுகள் சரிபார்க்கப்பட்ட வடிவத்தில் ஒரு ஒழுங்கின்மை இருப்பதைக் குறிக்கிறது.

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” வெளிப்பாட்டில் உள்ள “variable = number” எழுத்துப்பிழையால் ஏற்பட வாய்ப்புள்ளது. கிட்ஹப்பில் ஏற்கனவே உள்ள சி மொழி களஞ்சியங்களைப் பதிவிறக்கம் செய்து, மாடலை உருவாக்க அவற்றைப் பயன்படுத்த அனுமதிக்கும் ஸ்கிரிப்டை இந்த கிட் கொண்டுள்ளது. ஆயத்த மாதிரிகளும் கிடைக்கின்றன, குறியீட்டை உடனடியாகச் சரிபார்க்க உங்களை அனுமதிக்கிறது.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்