The এলএলভিএম প্রকল্পের বিকাশকারীরা নিরাপত্তা জোরদার করার লক্ষ্যে বেশ কয়েকটি পরিবর্তনের প্রস্তাব করেছে প্রকল্পের সি ++ মিশন সমালোচনামূলক এবং বাফার ওভাররানের কারণে সৃষ্ট ত্রুটিগুলি দূর করার উপায় প্রদান করে।
যেমন, তারা যে প্রস্তাবটি প্রকাশ করেছে তা বিশেষভাবে দুটি ক্ষেত্রে কাজের উপর দৃষ্টি নিবদ্ধ করে: একটি উন্নয়ন মডেল প্রদান যা বাফারগুলির সাথে নিরাপদে কাজ করার অনুমতি দেয় এবং libc++ স্ট্যান্ডার্ড ফাংশন লাইব্রেরির নিরাপত্তা জোরদার করতে কাজ করে।
এটি উল্লেখ করা হয়েছে যে C++ এর জন্য প্রস্তাবিত নিরাপদ প্রোগ্রামিং মডেলকাঁচা পয়েন্টার ম্যানিপুলেট করার পরিবর্তে বাফারগুলির সাথে কাজ করার সময় স্ট্যান্ডার্ড লাইব্রেরি দ্বারা প্রদত্ত ক্লাসগুলি ব্যবহার করা হয়». উদাহরণস্বরূপ, এটি std::array, std::vector, এবং std::span ক্লাসগুলি ব্যবহার করার প্রস্তাব করা হয়েছে, যেগুলি বরাদ্দকৃত মেমরির জন্য রানটাইম চেকের সাথে যোগ করা হবে।
আমাদের লক্ষ্য হল গুরুত্বপূর্ণ C++ কোড বেসগুলির নিরাপত্তা উন্নত করা। এ জন্য আমরা দুটি ধারণা নিয়ে কাজ করার পরিকল্পনা করছি।
শক্ত করা C++ স্ট্যান্ডার্ড লাইব্রেরি
C++ নিরাপদ বাফার প্রোগ্রামিং মডেল এবং অ্যাডপশন টুল
শক্ত করা libc++ সাধারণভাবে C++ স্ট্যান্ডার্ড লাইব্রেরি ইন্টারফেসগুলিকে আরও সুরক্ষিত করার উদ্দেশ্যে।C++ এর নিরাপদ বাফার প্রোগ্রামিং মডেলের সাথে শক্ত libc++ মেমরি অ্যাক্সেসের রানটাইম প্রশমন প্রদান করে। দত্তক নেওয়ার সরঞ্জামগুলি এই নতুন প্রোগ্রামিং মডেলে কোডের স্থানান্তরকে স্বয়ংক্রিয় করবে।
এর পাশাপাশি এতে আরও উল্লেখ করা হয়েছে "বিপজ্জনক" প্রোগ্রামিং অনুশীলনের বিরুদ্ধে লড়াই করতে ঝনঝন, যদি সমস্ত পয়েন্টার গাণিতিক ক্রিয়াকলাপের জন্য কম্পাইলার সতর্কতা জারি করার প্রস্তাব করে, "cppcoreguidelines-pro-bounds-pointer-arithmetic" পতাকা ব্যবহার করার সময় ক্ল্যাং-পরিপাটি লিন্টার সতর্কতার অনুরূপ, যার জন্য সমর্থন LLVM 16-এ উপস্থিত হবে। এই ধরনের সতর্কতা সক্ষম করতে, একটি পৃথক পতাকা ক্ল্যাং-এ যোগ করা হবে, ডিফল্টরূপে নিষ্ক্রিয় .
এটি libc++ এ একটি ঐচ্ছিক সুরক্ষা মোড বাস্তবায়নের পরিকল্পনা করা হয়েছে, যা, সক্রিয় করা হলে, কিছু পরিস্থিতি সনাক্ত করবে যা রানটাইমে অনির্ধারিত আচরণের দিকে পরিচালিত করে। উদাহরণস্বরূপ, ক্লাসে std::span এবং std::vector, একটি সীমার বাইরের অ্যাক্সেস নিরীক্ষণ করা হবে, এই ক্ষেত্রে প্রোগ্রামটি ব্যর্থ হবে৷
এই অতিরিক্ত রানটাইম চেকগুলিকে বিভিন্ন বিভাগে বিভক্ত করা হবে যা আলাদাভাবে নিয়ন্ত্রণ করা যেতে পারে। উদ্দেশ্য হল যে তাদের প্ল্যাটফর্মে একজন বিক্রেতা শিপিং libc++ শিপিং লাইব্রেরিতে (যদি থাকে) কোন চেকগুলি সক্ষম করতে হবে তা নির্ধারণ করতে পারে, কাঙ্ক্ষিত নিরাপত্তার স্তরের উপর নির্ভর করে৷
বিকাশকারীরা বিশ্বাস করেন যে এই ধরনের পরিবর্তনগুলি যুক্ত করা হলে তা libc++ C++ মানগুলির সাথে সঙ্গতিপূর্ণ রাখবে, যেহেতু অনির্ধারিত আচরণের ক্ষেত্রে কীভাবে পরিচালনা করা যায় তার পছন্দটি লাইব্রেরি বিকাশকারীদের উপর নির্ভর করে, যারা অন্যান্য জিনিসগুলির মধ্যে, অনির্ধারিত আচরণকে একটি লক হিসাবে বিবেচনা করতে পারে যার জন্য প্রোগ্রামের প্রয়োজন হয়। প্রস্থান
The libc++-এ রানটাইম চেকগুলিকে বিভাগগুলিতে ভাগ করার পরিকল্পনা করা হয়েছে যে স্বতন্ত্রভাবে অন্তর্ভুক্ত করা যেতে পারে. কিছু প্রস্তাবিত চেক যা আরও জটিল ক্রিয়াকলাপের ফলে না বা ABI পরিবর্তনগুলি ইতিমধ্যেই libc++ এর নিরাপদ মোডে (নিরাপদ মোড) প্রয়োগ করা হয়েছে।
পুনর্ব্যক্ত করার জন্য, চূড়ান্ত লক্ষ্য হ'ল শিপড লাইব্রেরির জন্য এই চেকগুলি উত্পাদনে সক্ষম করা; এটি একটি "শুধুমাত্র ডিবাগ" বৈশিষ্ট্য নয়, যদিও এটি অবশেষে দীর্ঘ ভাঙা "ডিবাগ মোড" প্রতিস্থাপন করবে।
উপরন্তু, এটি কোড সংশোধন সরঞ্জামের একটি সেট প্রস্তুত করার পরিকল্পনা করা হয়েছে যা ভেরিয়েবলগুলিকে কন্টেইনারে কাঁচা পয়েন্টার দিয়ে প্রতিস্থাপিত করার অনুমতি দেবে এবং এমন পরিস্থিতিতে বিকল্প হ্যান্ডলার প্রয়োগ করতে দেবে যেখানে কন্টেইনার সরাসরি পয়েন্টার প্রতিস্থাপন করতে পারে না (উদাহরণস্বরূপ, "if(array_pointer)" গঠনটিকে "if(span.data) এ রূপান্তর করা যেতে পারে )»).সেটিংস শুধুমাত্র স্থানীয় ভেরিয়েবল নয়, পয়েন্টার সহ পরামিতি টাইপ করতেও প্রয়োগ করা যেতে পারে।
সেটাও উল্লেখ করা হয়েছে একটি "ক্ল্যাং স্ট্যাটিক বিশ্লেষক পরীক্ষক" বিবেচনা করছেন রুট সংবেদনশীল যে সতর্ক করে যদি std::span একটি ধারক থেকে তৈরি করা হয় যা স্প্যানের কন্সট্রাক্টরে উল্লেখ করা আকারের চেয়ে ছোট। উল্লিখিত পরীক্ষকটি স্বয়ংসম্পূর্ণ এবং নিজের থেকে দরকারী, যদি সবকিছু ঠিকঠাক হয় তবে এটি সমস্ত ব্যবহারকারীর জন্য ডিফল্টরূপে সক্ষম হবে
পরিশেষে আপনি যদি এটি সম্পর্কে আরও জানতে আগ্রহী হন, আপনি বিশদে পরীক্ষা করতে পারেন নিম্নলিখিত লিঙ্ক.