LLVM پروجيڪٽ C++ ۾ بفر محفوظ هينڊلنگ کي ترقي ڪري ٿو

LLVM پروجيڪٽ جي ڊولپرز ڪيتريون ئي تبديليون تجويز ڪيون آهن جن جو مقصد مشن-نازڪ C++ منصوبن جي سيڪيورٽي کي مضبوط ڪرڻ ۽ بفر اووررنز جي ڪري پيدا ٿيل غلطين کي ختم ڪرڻ جو وسيلو مهيا ڪرڻ آهي. ڪم ٻن علائقن تي مرکوز آهي: هڪ ترقياتي ماڊل مهيا ڪرڻ جيڪو توهان کي محفوظ طور تي بفرن سان ڪم ڪرڻ جي اجازت ڏئي ٿو، ۽ ڪم ڪرڻ لاءِ ڪم ڪري رهيو آهي libc++ معياري لائبريري جي حفاظت کي سخت ڪرڻ.

C++ لاءِ تجويز ڪيل محفوظ پروگرامنگ ماڊل معياري لائبريري پاران مهيا ڪيل ڪلاسن کي استعمال ڪرڻ آهي جڏهن بفرز سان ڪم ڪرڻ بجاءِ بيئر پوائنٽرز کي هٿي وٺرائڻ جي. مثال طور، ڪلاس std::array، std::vector ۽ std::span کي استعمال ڪرڻ جي تجويز ڏني وئي آهي، جن کي رن-ٽائم چيڪ سان شامل ڪيو ويندو، حد کان ٻاهر مختص ڪيل ميموري لاءِ.

ڪلانگ ۾ خطرناڪ پروگرامنگ جي عملن کي منهن ڏيڻ لاءِ، اهو تجويز ڪيو ويو آهي ته سڀني پوائنٽر رياضي واري عملن لاءِ گڏ ڪرڻ وارو ڊيڄاريندڙ جاري ڪيو وڃي، جهڙوڪ ڪلانگ-ٽيڊي جي لِنٽر وارننگن وانگر جڏهن ”cppcoreguidelines-pro-bounds-pointer-arithmetic“ جھنڊو استعمال ڪيو ويندو، جنهن لاءِ حمايت ظاهر ٿيندي ڇڏڻ LLVM 16. اهڙي ڊيڄاريندڙ کي فعال ڪرڻ لاء، هڪ الڳ پرچم ڪلانگ ۾ شامل ڪيو ويندو، جيڪو ڊفالٽ طور تي فعال نه آهي.

اهو libc++ ۾ اختياري سخت تحفظ واري موڊ کي لاڳو ڪرڻ جي منصوبابندي ڪئي وئي آهي، جيڪو، جڏهن فعال ڪيو ويندو، ڪجهه حالتن کي پڪڙيندو جيڪي رن ٽائم تي اڻڄاتل رويي کي ڏسندا. مثال طور، std::span ۽ std::vector طبقن ۾، حد کان ٻاهر جي رسائي جي نگراني ڪئي ويندي، ان صورت ۾ پروگرام خراب ٿي ويندو. ڊولپرز جو خيال آهي ته اهڙيون تبديليون شامل ڪرڻ سان libc++ C++ معيارن سان مطابقت رکي ٿي، ڇاڪاڻ ته اڻ ڄاتل رويي جي ڪيسن کي ڪيئن سنڀالڻ جو انتخاب لائبريري جي ڊولپرز وٽ آهي، جيڪو ٻين شين جي وچ ۾، اڻ تعريف ٿيل رويي کي هڪ حادثي جي طور تي تعبير ڪري ٿو جنهن جي ضرورت آهي. نڪرڻ جو پروگرام.

libc++ ۾ رن ٽائم چيڪن کي ڀاڱن ۾ ورهائڻ جي رٿابندي ڪئي وئي آھي جيڪي انفرادي طور شامل ڪري سگھجن ٿيون. ڪجھ تجويز ڪيل چيڪ جيڪي وڌيڪ پيچيده عملن جي نتيجي ۾ نٿا اچن يا ABI تبديليون اڳ ۾ ئي libc++ جي محفوظ موڊ ۾ لاڳو ٿيل آهن.

ان کان علاوه، ڪوڊ کي درست ڪرڻ لاءِ هڪ ٽول ڪٽ تيار ڪرڻ جي منصوبابندي ڪئي وئي آهي، توهان کي اجازت ڏئي ٿي ته متغيرن کي ڪنٽينرز تي بيئر پوائنٽرز سان تبديل ڪريو ۽ انهن حالتن ۾ متبادل هينڊلر لاڳو ڪريو جتي ڪنٽينر سڌو سنئون پوائنٽر کي تبديل نٿو ڪري سگهي (مثال طور، "if (array_pointer)" ٺاھڻ کي "if (span.data ()" ۾ تبديل ڪري سگھجي ٿو. ايڊجسٽمينٽ نه رڳو مقامي متغيرن تي لاڳو ٿي سگھي ٿو، پر پوائنٽر سان گڏ پيٽرول ٽائيپ ڪرڻ لاء پڻ.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو