குறியீட்டுப் பிழைகளைக் கண்டறிய இன்டெல் திறந்த மூலக் கட்டுப்பாட்டுக் கொடி இயந்திரக் கற்றல் அமைப்பு

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

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

மதிப்பாய்வில் உள்ள குறியீடு, குறிப்பு முடிவு மரத்திற்கு எதிராக சரிபார்க்கப்பட்ட வடிவங்களை அடையாளம் காணும் இதேபோன்ற செயல்முறைக்கு உட்படுகிறது. அண்டை கிளைகளுடன் பெரிய முரண்பாடுகள் சரிபார்க்கப்பட்ட வடிவத்தில் ஒரு ஒழுங்கின்மை இருப்பதைக் குறிக்கிறது. டெம்ப்ளேட்டில் உள்ள பிழையைக் கண்டறிவது மட்டுமல்லாமல், ஒரு திருத்தத்தை பரிந்துரைக்கவும் கணினி உங்களை அனுமதிக்கிறது. எடுத்துக்காட்டாக, OpenSSL குறியீட்டில், “(s1 == NULL) ∧ (s2 == NULL)” என்ற கட்டுமானம் அடையாளம் காணப்பட்டது, இது தொடரியல் மரத்தில் 8 முறை மட்டுமே தோன்றியது, அதே சமயம் “(s1 ==) மதிப்புடன் மிக நெருக்கமான கிளை NULL) || (s2 == NULL)” சுமார் 7 ஆயிரம் முறை நிகழ்ந்தது. கணினி ஒரு ஒழுங்கின்மையைக் கண்டறிந்தது “(s1 == NULL) | (s2 == NULL)” இது மரத்தில் 32 முறை தோன்றியது.

குறியீட்டுப் பிழைகளைக் கண்டறிய இன்டெல் திறந்த மூலக் கட்டுப்பாட்டுக் கொடி இயந்திரக் கற்றல் அமைப்பு

குறியீடு துண்டத்தை பகுப்பாய்வு செய்யும் போது “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

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