باز کردن منو اصلی

تغییرات

جز
ویرایش Zugim (بحث) به آخرین تغییری که FreshmanBot انجام داده بود واگردانده شد
 
== تشریح ==
امروزه بیشتر سیستم‌عامل‌های مدرن از یک [[پشته]] برای ارسال آرگومان‌ها به توابع و همچنین ذخیره کردن متغیرهای محلی استفاده می‌کنند. یک پشته، حافظه‌ای به صورت LIFO است که ورود و خروج اطلاعات از یک طرف انجام می‌گیرد. بنابراین آخرین شیئی که وارد پشته شده، اولین شیئی است که از آن خارج می‌شود. هر [[فرایند]] برای خود پشته‌ای دارد که آرگومان‌های توابع و متغیرهای محلی در آن ذخیره می‌شوند و این پشته در بالاترین آدرس تصویر فرایند در حافظه قرار دارد. وقتی که یک برنامه تابعی را فراخوانی می‌کند، یک «قاب پشته» جدید ایجاد می‌شود. این قاب پشته علاوه بر اینکه دربرگیرنده آرگومان‌هایی است که به تابع ارسال شده‌اند، دربرگیرنده فضایی پویا برای متغیرهای محلی تابع است. «اشاره‌گر پشته» [[ثبات|ثباتی]] است که آدرس بالای پشته را نگهداری می‌کند. از آنجا که هر وقت مقدار جدیدی وارد پشته می‌شود محتوای این ثبات هم تغییر می‌کند، در خیلی از موارد یک «اشاره‌گر قاب» هم وجود دارد که در ابتدای پشته قرار دارد تا بر اساس این اشاره‌گر بتوان به متغیرهای محلی راحت‌تر دسترسی پیدا کرد. اما مسئله‌ای که باعث ایجاد [https://shekaf.org/downloads/package-pentest-with-kali-2-level-3/ سرریز بافر] می‌شود این است که آدرس برگشت فراخوانی تابع هم در پشته ذخیره می‌شود و از آنجا که سرریز شدن یک متغیر محلی می‌تواند باعث شود آدرس برگشت تابع در پشته بازنویسی شود، یک کاربر خرابکار قادر خواهد بود هر کدی که می‌خواهد را اجرا کند.<ref>http://www.freebsd.org/doc/en/books/developers-handbook/secure-bufferov.html</ref>
 
== جلوگیری ==