LLVM திட்டமானது C++ இல் பஃபர்களுடன் பாதுகாப்பாக வேலை செய்வதற்கான கருவிகளை உருவாக்குகிறது

LLVM திட்டத்தின் டெவலப்பர்கள், மிஷன்-கிரிட்டிக்கல் C++ திட்டங்களின் பாதுகாப்பை வலுப்படுத்துவதை நோக்கமாகக் கொண்ட பல மாற்றங்களை முன்மொழிந்துள்ளனர் மற்றும் இடையகங்களின் மீறல்களால் ஏற்படும் பிழைகளை அகற்றுவதற்கான வழிமுறைகளை வழங்குகின்றனர். வேலை இரண்டு பகுதிகளில் கவனம் செலுத்துகிறது: பஃபர்களுடன் பாதுகாப்பான பணியை அனுமதிக்கும் ஒரு மேம்பாட்டு மாதிரியை வழங்குதல் மற்றும் libc++ தரநிலை நூலக செயல்பாடுகளின் பாதுகாப்பை வலுப்படுத்துதல்.

C++ க்கான முன்மொழியப்பட்ட பாதுகாப்பான நிரலாக்க மாதிரியானது, வெறும் சுட்டிகளைக் கையாளுவதற்குப் பதிலாக இடையகங்களுடன் பணிபுரியும் போது நிலையான நூலகத்தால் வழங்கப்படும் வகுப்புகளைப் பயன்படுத்துவதை உள்ளடக்கியது. எடுத்துக்காட்டாக, std::array, std::vector மற்றும் std::span வகுப்புகளைப் பயன்படுத்த முன்மொழியப்பட்டது, இது அதிக-ஒதுக்கீடு செய்யப்பட்ட நினைவகத்திற்கான ரன்-டைம் காசோலையைச் சேர்க்கும்.

கணகணக்கில் உள்ள ஆபத்தான நிரலாக்க நடைமுறைகளை எதிர்த்துப் போராட, "cppcoreguidelines-pro-bounds-pointer-arithmetic" கொடியைப் பயன்படுத்தும் போது, ​​clang-tidy linter எச்சரிக்கைகள் வெளியீட்டைப் போலவே, அனைத்து சுட்டி எண்கணித செயல்பாடுகளுக்கும் கம்பைலர் எச்சரிக்கைகளைக் காண்பிக்க முன்மொழியப்பட்டுள்ளது. வெளியீட்டு LLVM 16 இல் தோன்றும். அத்தகைய எச்சரிக்கைகளை இயக்க, ஒரு தனி கொடியானது clang இல் சேர்க்கப்படும், இயல்பாக செயலில் இல்லை.

libc++ இல் விருப்பத்தேர்வு மேம்படுத்தப்பட்ட பாதுகாப்பு பயன்முறையை செயல்படுத்த திட்டமிடப்பட்டுள்ளது, இது இயக்கப்படும் போது, ​​வரையறுக்கப்படாத நடத்தைக்கு வழிவகுக்கும் சில சூழ்நிலைகளை இயக்க நேரத்தில் பிடிக்கும். எடுத்துக்காட்டாக, std::span மற்றும் std::vector வகுப்புகளில், எல்லைக்கு அப்பாற்பட்ட நினைவக அணுகல் கண்காணிக்கப்படும், மேலும் கண்டறியப்பட்டால், நிரல் செயலிழக்கும். இத்தகைய மாற்றங்களைச் சேர்ப்பது, C++ தரநிலைகளுக்கு இணங்க libc++ வைத்திருக்கும் என்று டெவலப்பர்கள் நம்புகின்றனர், ஏனெனில் வரையறுக்கப்படாத நடத்தையை எவ்வாறு கையாள்வது என்பது நூலக உருவாக்குநர்களிடம் உள்ளது, மற்றவற்றுடன், வரையறுக்கப்படாத நடத்தையை தோல்வியாகக் கருதலாம், நிறுத்துவதற்கான திட்டம்.

libc++ இல் இயக்க நேர சோதனைகள் தனித்தனியாக இயக்கக்கூடிய வகைகளாக பிரிக்க திட்டமிடப்பட்டுள்ளது. சில முன்மொழியப்பட்ட காசோலைகள், செயல்பாடுகளின் சிக்கலுக்கு வழிவகுக்காது அல்லது ஏபிஐக்கு மாற்றங்களை ஏற்படுத்தாது, ஏற்கனவே libc++ பாதுகாப்பான பயன்முறையில் செயல்படுத்தப்பட்டுள்ளன.

கூடுதலாக, குறியீட்டை சரிசெய்வதற்கான கருவிகளைத் தயாரிக்க திட்டமிடப்பட்டுள்ளது, இது மாறிகளை வெற்று சுட்டிகளுடன் கொள்கலன்களுடன் மாற்றவும் மற்றும் கொள்கலன் நேரடியாக சுட்டிக்காட்டியை மாற்ற முடியாத சூழ்நிலைகளில் மாற்று கையாளுதல்களைப் பயன்படுத்தவும் உங்களை அனுமதிக்கிறது (எடுத்துக்காட்டாக, "if(array_pointer)" கன்ஸ்ட்ரக்ட் முடியும் "if(span.data) ()" என மாற்றப்படும். சரிசெய்தல் உள்ளூர் மாறிகளுக்கு மட்டுமல்ல, சுட்டி வகைகளின் அளவுருக்களுக்கும் பயன்படுத்தப்படலாம்.

ஆதாரம்: opennet.ru

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