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

نیا تبصرہ شامل کریں