স্ট্যাকটি নীচের দিকে কেন বৃদ্ধি পায়?


31

আমি ধরে নিচ্ছি এটির কোনও ইতিহাস আছে তবে স্ট্যাকটি নীচের দিকে কেন বৃদ্ধি পাচ্ছে?

আমার কাছে মনে হয় বাফার ওভারফ্লোগুলি যদি স্ট্যাকটি উপরের দিকে বাড়তে থাকে তবে তা কাজে লাগানো অনেক বেশি শক্ত ...


3
stackoverflow.com/questions/1677415/… নোট করে যে স্ট্যাকটি কিছুটা ডিগ্রি পর্যন্ত বাড়তে পারে।
জেবি কিং

6
এটির মতোই একটি প্রশ্ন রয়েছে: স্ট্যাকওভারফ্লো / প্রশ্ন / 2035568/… । সত্যিকারের বিষয় এখানে একটি আরও ভাল প্রশ্ন এবং উত্তর আছে: stackoverflow.com/questions/664744/…
কার্লসন

লিঙ্কযুক্ত প্রশ্নটি যথেষ্ট পরিমাণে বাফার ওভারফ্লো বিষয়টিকে কভার করে না।
ডেডালনিক্স

1
কারণ গাদা উপরের দিকে বেড়ে যায়।
টাইলার

2
শীর্ষে বা নীচে 0 মেমরি অবস্থান?

উত্তর:


21

আমি বিশ্বাস করি এটি কম্পিউটিংয়ের খুব প্রথম দিন থেকেই আসে, যখন স্মৃতিশক্তি খুব সীমাবদ্ধ ছিল এবং স্ট্যাকের দ্বারা একচেটিয়া ব্যবহারের জন্য মেমরির একটি বৃহত অংশ প্রাক-বরাদ্দ করা বুদ্ধিমানের কাজ ছিল না। সুতরাং, ঠিকানা থেকে শূন্য মেমরিকে উপরের দিকে বরাদ্দ করে, এবং মেমরিটির প্রান্ত থেকে নীচের দিকে স্ট্যাক করে, আপনি হিপ এবং স্ট্যাক উভয়ই মেমরির একই অঞ্চল ভাগ করতে পারেন।

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

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

এর পরে, বেশিরভাগ স্থাপত্যগুলির সাথে এটি একই স্থাপত্যের পূর্ববর্তী সংস্করণগুলির সাথে সামঞ্জস্য বজায় রাখার বিষয় ছিল। এ কারণেই আজও আমাদের সাথে রয়েছে উলটা-ডাউন স্ট্যাকগুলি।


8
ইতিহাসে আরও পিছনে যান এবং কোনও গাদা ছিল না, আজও অনেক 8 এবং 16 বিট মাইক্রো কন্ট্রোলারের একটি গাদা নেই। স্ট্যাকটি হ্রাস পেয়েছে তাই প্রোগ্রামটি একটি স্বল্প মেমরির ঠিকানায় ইনস্টল করা যায় এবং স্ট্যাকটি ছিল বাকী স্মৃতি। স্ট্যাক ইনিশিয়ালেশন প্রোগ্রাম লোডের আগে প্রোগ্রামগুলি সরলকরণের আগে সম্পাদন করা যায়।
mattnz

1
বেশিরভাগ ছোট মাইক্রোকন্ট্রোলারের একটি গাদা থাকে, কেবল একটি গাদা জন্মে না। আপনার যখন অল্প পরিমাণে র‌্যাম (<1Kbytes) কাজ করার জন্য থাকে তখন গাদা হয়ে গতিশীল মেমরির বরাদ্দ ব্যবহার করার পক্ষে যুক্তিযুক্ত হওয়া শক্ত। সাধারণত একমাত্র মেমরি বিভাগের আকারটি পরিবর্তিত হয় স্ট্যাক।
তেহনিতে

7

প্রোগ্রাম মেমরি traditionতিহ্যগতভাবে সেট আপ করা হয়

code
constants
heap (growing up)
...
stack (growing down)

গাদা এবং স্ট্যাক এক্সচেঞ্জ হতে পারে

তবে স্ট্যাক অন্যভাবে চলে গেলে বাফার ওভারফ্লোগুলি এখনও ব্যবহার করা যেতে পারে

strcpyউদাহরণ হিসাবে ক্লাসিক গ্রহণ

foo(char* in){
char[100] buff;
strcpy(buff,in);
}

স্ট্যাক মেমরি হিসাবে

ret foo
arg in
buff array
ret strcpy
buf pointer
in

এর অর্থ হ'ল অনুলিপিটি করা হয়ে গেলে রিটার্নের ঠিকানাটি strcpyবাফারের পরে হয় (তার fooফেরতের ঠিকানার পরিবর্তে ) এবং যা কিছু আছে তার দ্বারা ওভাররাইট করা যায়in


4

কিছু হার্ডওয়ারের উচ্চ স্তরে মেমরি থেকে শুরু করে গাদা থাকে, কমতে থাকে, যখন স্ট্যাকটি কম মেমোরি থেকে শুরু হয়।

এইচপি এর পিএ-আরআইএসসি হার্ডওয়্যার, অন্যান্যের মধ্যে এই আছে: http://www.embeddedrelated.com/usenet/embedded/show/68749-1.php

শ্রদ্ধেয় মাল্টিক্স অপারেটিং সিস্টেমটি এমন একটি হার্ডওয়্যারে ছড়িয়ে পড়েছিল (সম্ভবত অনেকের মধ্যে একটি) স্ট্যাকগুলি বড় হচ্ছে: দেখুন http://www.acsac.org/2002/papers/classic-multics.pdf , বিভাগ ২.৩.২ এর শেষে:

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

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


ঠিক আছে, এক্সিকিউটেবল স্ট্যাক (গুলি) না থাকা সম্ভবত মাল্টিক্সকে ঠিক ততটুকু বুদ্ধিমান স্ট্যাকের দিকনির্দেশে সহায়তা করেছিল এবং অবশ্যই পিএল / 1 তে লিখিত অনেক প্রোগ্রামের সাহায্যে স্ট্রিং ওভারফ্লোগুলিও আসলে সমস্যা ছিল না।
গ্রেগ এ উডস 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.