হার্ডওয়্যার বা সফ্টওয়্যার দ্বারা স্ট্যাক ওভারফ্লো সনাক্ত করা যায়?


26

স্ট্যাক ওভারফ্লোগুলি সনাক্ত করা সফ্টওয়্যার (অপারেটিং সিস্টেম) এর কাজ বা সিপিইউতে একটি ব্যতিক্রম ঘটায় হার্ডওয়্যারে স্ট্যাক ওভারফ্লো সনাক্ত করা হয়?


আমি বেশিরভাগ সিপিইউতে এমএমইউ ত্রুটির মাধ্যমে হার্ডওয়্যারটি বলব। পেজিংয়ের পাশাপাশি x৮২ এর 32 বিট মোডে বিভাগগুলি ছিল এবং কোড, ডেটা, এক্সট্র ... এর সাথে বেস ঠিকানা এবং আকার উভয় বিভাগের মতোই "স্ট্যাক সেগমেন্ট" যুক্ত হয়। এই সীমার বাইরে যে কোনও অ্যাক্সেস একটি ত্রুটি ট্রিগার করবে।
টিএমএলআইবি

উত্তর:


25

এটি সফ্টওয়্যার, বা হার্ডওয়্যার, বা উভয়ই বা কোনও কিছুই হতে পারে।

দুটি ধরণের ওভারফ্লো রয়েছে: স্ট্যাক বাড়ানোর সময় ওভারফ্লো (যখন কোনও ফাংশনে প্রবেশের সময়) এবং স্ট্যাকের কোনও অ্যারে অ্যাক্সেস করার সময় ওভারফ্লো। পর্যাপ্ত জায়গা রয়েছে কিনা তা যাচাই করার জন্য, স্ট্যাকটি বাড়ানোর সময় ওভারফ্লোগুলি ফাংশন এন্ট্রি বাউন্ড চেক করে সনাক্ত করা যায় (এবং হয় ত্রুটি সংকেত দেয় বা না থাকলে স্ট্যাকটি বৃদ্ধি করে)। স্ট্যাকের কোনও অ্যারে অ্যাক্সেস করার সময় ওভারফ্লোগুলি হ'ল কেবল নিম্ন-স্তরের ভাষাগুলিতে এমন একটি সমস্যা যা অ্যারে সীমাটি যাচাই করে না; সমাধানটি অ্যারের সীমাটি যাচাই করতে হবে।

এই সফ্টওয়্যার পদ্ধতির সুবিধা রয়েছে যে তারা সম্পূর্ণরূপে নির্ভরযোগ্যভাবে কাজ করে: আপনি নিশ্চিত হতে পারেন যে কোনও স্ট্যাকের ওভারফ্লো সনাক্ত হবে। তাদের খারাপ দিকটি হ'ল তারা কোডের আকার এবং সম্পাদনের সময় বাড়ায়। যতক্ষণ না কোনও ওভারফ্লো না ঘটে ততক্ষণ বিনা ব্যয়ে বেশিরভাগ ওভারফ্লো সনাক্ত করার পদ্ধতি সরবরাহ করে হার্ডওয়্যার সহায়তা করতে পারে। কোনও এমএমইউ an সহ একটি আর্কিটেকচারে , রানটাইম পরিবেশটি পরের পৃষ্ঠাটি আনম্যাপে রেখে, পৃষ্ঠা সীমানায় স্ট্যাকটি মানচিত্রের ব্যবস্থা করতে পারে।

+---------------+---------------+---------------+---------------+
| stack                         | unmapped      | other stuff   |
|    ----> direction of growth  |               |               |
+---------------+---------------+---------------+---------------+
^               ^               ^               ^               ^  page boundaries

এইভাবে, যদি সফ্টওয়্যার পৃষ্ঠার সীমানা ছাড়িয়ে ডেটা অ্যাক্সেস করার চেষ্টা করে (কারণ স্ট্যাক পয়েন্টারটি সীমানা ছাড়িয়ে গেছে বা অ্যারের অ্যাক্সেসটি সীমা ছাড়িয়ে গেছে এবং সীমানা ছাড়িয়ে গেছে) তবে এটি একটি মোড়বিহীন অঞ্চল অ্যাক্সেস করে ত্রুটি সৃষ্টি করবে । ওভারফ্লো যথেষ্ট পরিমাণে ছোট হলেই এটি ঘটে: যদি ওভারফ্লো পরিমাণ খুব বেশি হয় তবে প্রোগ্রামটি ঠিকানার জায়গার ফাঁকের অপর পাশের অন্যান্য জিনিসগুলি অ্যাক্সেস করতে পারে।

হার্ডওয়্যার পদ্ধতির ডাউনসাইডগুলি হ'ল এটি সম্পূর্ণরূপে নির্ভরযোগ্য নয় যেহেতু প্রচুর পরিমাণে ওভারফ্লো সনাক্ত করা যায় না এবং এটি ঠিকানার জায়গার মধ্যে থাকা অ্যারে ওভারফ্লোগুলি সনাক্ত করে না।

অ্যারে ওভারফ্লোগুলি সনাক্ত করতে, অন্য সফ্টওয়্যার কৌশলটি ক্যানারি : স্ট্যাকের শীর্ষে বা ফ্রেমের মধ্যে একটি বিশেষ মান রাখুন এবং পরীক্ষা করুন যে ফাংশন রিটার্নে ক্যানারি মান পরিবর্তন হয়নি। এটিও একটি অপূর্ণ প্রযুক্তি, কারণ ওভারফ্লো ক্যানারি পুরোপুরি এড়াতে পারে বা এটি সনাক্ত করা যায় না কারণ ক্যানারি মানটি যাচাই করার সময়কালে পুনরুদ্ধার করা হয়েছিল। যাইহোক, কিছু সুরক্ষার দুর্বলতা কাজে লাগানো আরও শক্ত করে তোলে।

স্ট্যাক ওভারফ্লোগুলি এড়ানোর নিরাপদ এবং সস্তারতম উপায় হ'ল স্থির বিশ্লেষণের মাধ্যমে প্রোগ্রামটি কার্যকর করার আগে প্রোগ্রামটির প্রয়োজনীয় পরিমাণের স্ট্যাকের গণনা করা। তবে এটি সর্বদা ব্যবহারিক নয়: কোনও প্রোগ্রামের জন্য প্রয়োজনীয় স্ট্যাকের পরিমাণ সাধারণভাবে অনস্বীকার্য এবং প্রোগ্রাম দ্বারা যে ডেটাগুলি ম্যানিপুলেটেড হয় তার উপর নির্ভর করে।

¹ একই নীতি এছাড়াও অথবা যদি সেখানে একটি একক থ্রেড যার স্ট্যাক বিদ্যমান শারীরিক ম্যাপিং এর প্রান্ত এ হল শুধু একটি MPU সঙ্গে প্রয়োগ করা যেতে পারে, কোন মেমরি সুরক্ষার সাহায্যে।


4
অ্যারে স্ট্যাকের মধ্যে থাকা সত্ত্বেও আমি আউট অফ অফ সীমা অ্যাক্সেসটিকে একটি স্ট্যাক ওভারফ্লো বলব না। এটি কেবল বাফার ওভারফ্লোর একটি বিশেষ কেস।
কোডসইনচাউস

প্রাথমিক স্ট্যাক আইটেমগুলিতে বরাদ্দ না করা যা একটি নন-স্ট্যাক / ফ্রেম পয়েন্টার বা অ-ধ্রুবক অফসেটের তুলনায় রেফারেন্সযুক্ত traditionalতিহ্যবাহী স্ট্যাক ওভারফ্লোগুলি এড়াতে পারে। আলাদা রিটার্ন অ্যাড্রেস স্ট্যাক (বা আরএআই / রেজিস্টার স্পিল স্ট্যাক ইটানিয়ামের মতো) ব্যবহার করা কমপক্ষে রিটার্ন-ভিত্তিক প্রোগ্রামিংয়ের সুযোগকে হ্রাস করবে।
পল এ। ক্লেটন

সীমানার অ্যাক্সেসকে আরও সঠিকভাবে ওভাররান বলা হয় , ওভারফ্লো নয়।
বেন ভয়েগ্ট

3
@ দুর্দান্ত ভিডিও 1 প্রতিটি প্ল্যাটফর্ম স্ট্যাকের ওভারফ্লোগুলি সনাক্ত করে না। আপনি কেবল স্ট্যাকের পরে যা কিছু ওভাররাইট করে শেষ করতে পারেন (অন্য কোনও বাফার ওভারফ্লোয়ের মতো)।
ব্যবহারকারী 253751

1
@ কোডসইনচওস, কখনও কখনও স্ট্যাক-বরাদ্দ করা বাফারগুলিতে বাফার ওভারফ্লোগুলি "স্ট্যাক ওভারফ্লো" (সংক্ষেপে) বলা হয়। মঞ্জুর, প্রসঙ্গ ছাড়াই সেই পরিভাষাটি কিছুটা বিভ্রান্ত হতে পারে।
ডিডাব্লিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.