স্ট্যাক ওভারফ্লোগুলি সনাক্ত করা সফ্টওয়্যার (অপারেটিং সিস্টেম) এর কাজ বা সিপিইউতে একটি ব্যতিক্রম ঘটায় হার্ডওয়্যারে স্ট্যাক ওভারফ্লো সনাক্ত করা হয়?
স্ট্যাক ওভারফ্লোগুলি সনাক্ত করা সফ্টওয়্যার (অপারেটিং সিস্টেম) এর কাজ বা সিপিইউতে একটি ব্যতিক্রম ঘটায় হার্ডওয়্যারে স্ট্যাক ওভারফ্লো সনাক্ত করা হয়?
উত্তর:
এটি সফ্টওয়্যার, বা হার্ডওয়্যার, বা উভয়ই বা কোনও কিছুই হতে পারে।
দুটি ধরণের ওভারফ্লো রয়েছে: স্ট্যাক বাড়ানোর সময় ওভারফ্লো (যখন কোনও ফাংশনে প্রবেশের সময়) এবং স্ট্যাকের কোনও অ্যারে অ্যাক্সেস করার সময় ওভারফ্লো। পর্যাপ্ত জায়গা রয়েছে কিনা তা যাচাই করার জন্য, স্ট্যাকটি বাড়ানোর সময় ওভারফ্লোগুলি ফাংশন এন্ট্রি বাউন্ড চেক করে সনাক্ত করা যায় (এবং হয় ত্রুটি সংকেত দেয় বা না থাকলে স্ট্যাকটি বৃদ্ধি করে)। স্ট্যাকের কোনও অ্যারে অ্যাক্সেস করার সময় ওভারফ্লোগুলি হ'ল কেবল নিম্ন-স্তরের ভাষাগুলিতে এমন একটি সমস্যা যা অ্যারে সীমাটি যাচাই করে না; সমাধানটি অ্যারের সীমাটি যাচাই করতে হবে।
এই সফ্টওয়্যার পদ্ধতির সুবিধা রয়েছে যে তারা সম্পূর্ণরূপে নির্ভরযোগ্যভাবে কাজ করে: আপনি নিশ্চিত হতে পারেন যে কোনও স্ট্যাকের ওভারফ্লো সনাক্ত হবে। তাদের খারাপ দিকটি হ'ল তারা কোডের আকার এবং সম্পাদনের সময় বাড়ায়। যতক্ষণ না কোনও ওভারফ্লো না ঘটে ততক্ষণ বিনা ব্যয়ে বেশিরভাগ ওভারফ্লো সনাক্ত করার পদ্ধতি সরবরাহ করে হার্ডওয়্যার সহায়তা করতে পারে। কোনও এমএমইউ an সহ একটি আর্কিটেকচারে , রানটাইম পরিবেশটি পরের পৃষ্ঠাটি আনম্যাপে রেখে, পৃষ্ঠা সীমানায় স্ট্যাকটি মানচিত্রের ব্যবস্থা করতে পারে।
+---------------+---------------+---------------+---------------+
| stack | unmapped | other stuff |
| ----> direction of growth | | |
+---------------+---------------+---------------+---------------+
^ ^ ^ ^ ^ page boundaries
এইভাবে, যদি সফ্টওয়্যার পৃষ্ঠার সীমানা ছাড়িয়ে ডেটা অ্যাক্সেস করার চেষ্টা করে (কারণ স্ট্যাক পয়েন্টারটি সীমানা ছাড়িয়ে গেছে বা অ্যারের অ্যাক্সেসটি সীমা ছাড়িয়ে গেছে এবং সীমানা ছাড়িয়ে গেছে) তবে এটি একটি মোড়বিহীন অঞ্চল অ্যাক্সেস করে ত্রুটি সৃষ্টি করবে । ওভারফ্লো যথেষ্ট পরিমাণে ছোট হলেই এটি ঘটে: যদি ওভারফ্লো পরিমাণ খুব বেশি হয় তবে প্রোগ্রামটি ঠিকানার জায়গার ফাঁকের অপর পাশের অন্যান্য জিনিসগুলি অ্যাক্সেস করতে পারে।
হার্ডওয়্যার পদ্ধতির ডাউনসাইডগুলি হ'ল এটি সম্পূর্ণরূপে নির্ভরযোগ্য নয় যেহেতু প্রচুর পরিমাণে ওভারফ্লো সনাক্ত করা যায় না এবং এটি ঠিকানার জায়গার মধ্যে থাকা অ্যারে ওভারফ্লোগুলি সনাক্ত করে না।
অ্যারে ওভারফ্লোগুলি সনাক্ত করতে, অন্য সফ্টওয়্যার কৌশলটি ক্যানারি : স্ট্যাকের শীর্ষে বা ফ্রেমের মধ্যে একটি বিশেষ মান রাখুন এবং পরীক্ষা করুন যে ফাংশন রিটার্নে ক্যানারি মান পরিবর্তন হয়নি। এটিও একটি অপূর্ণ প্রযুক্তি, কারণ ওভারফ্লো ক্যানারি পুরোপুরি এড়াতে পারে বা এটি সনাক্ত করা যায় না কারণ ক্যানারি মানটি যাচাই করার সময়কালে পুনরুদ্ধার করা হয়েছিল। যাইহোক, কিছু সুরক্ষার দুর্বলতা কাজে লাগানো আরও শক্ত করে তোলে।
স্ট্যাক ওভারফ্লোগুলি এড়ানোর নিরাপদ এবং সস্তারতম উপায় হ'ল স্থির বিশ্লেষণের মাধ্যমে প্রোগ্রামটি কার্যকর করার আগে প্রোগ্রামটির প্রয়োজনীয় পরিমাণের স্ট্যাকের গণনা করা। তবে এটি সর্বদা ব্যবহারিক নয়: কোনও প্রোগ্রামের জন্য প্রয়োজনীয় স্ট্যাকের পরিমাণ সাধারণভাবে অনস্বীকার্য এবং প্রোগ্রাম দ্বারা যে ডেটাগুলি ম্যানিপুলেটেড হয় তার উপর নির্ভর করে।
¹ একই নীতি এছাড়াও অথবা যদি সেখানে একটি একক থ্রেড যার স্ট্যাক বিদ্যমান শারীরিক ম্যাপিং এর প্রান্ত এ হল শুধু একটি MPU সঙ্গে প্রয়োগ করা যেতে পারে, কোন মেমরি সুরক্ষার সাহায্যে।