سرریز بافر: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
KasparBot (بحث | مشارکت‌ها)
قرار دادن {{داده‌های کتابخانه‌ای}} با اطلاعات ویکی‌داده
جز مسأله --> مسئله وپ:همزه با استفاده از AWB
خط ۱۰:
 
== تشریح ==
امروزه بیشتر سیستم‌عامل‌های مدرن از یک [[پشته]] برای ارسال آرگومان‌ها به توابع و همچنین ذخیره کردن متغیرهای محلی استفاده می‌کنند. یک پشته، حافظه‌ای به صورت LIFO است که ورود و خروج اطلاعات از یک طرف انجام می‌گیرد. بنابراین آخرین شیئی که وارد پشته شده، اولین شیئی است که از آن خارج می‌شود. هر [[فرایند]] برای خود پشته‌ای دارد که آرگومان‌های توابع و متغیرهای محلی در آن ذخیره می‌شوند و این پشته در بالاترین آدرس تصویر فرایند در حافظه قرار دارد. وقتی که یک برنامه تابعی را فراخوانی می‌کند، یک «قاب پشته» جدید ایجاد می‌شود. این قاب پشته علاوه بر اینکه دربرگیرنده آرگومان‌هایی است که به تابع ارسال شده‌اند، دربرگیرنده فضایی پویا برای متغیرهای محلی تابع است. «اشاره‌گر پشته» [[ثبات|ثباتی]] است که آدرس بالای پشته را نگه داری می‌کند. از آنجا که هر وقت مقدار جدیدی وارد پشته می‌شود محتوای این ثبات هم تغییر می‌کند، در خیلی از موارد یک «اشاره‌گر قاب» هم وجود دارد که در ابتدای پشته قرار دارد تا بر اساس این اشاره‌گر بتوان به متغیرهای محلی راحت‌تر دسترسی پیدا کرد. اما مسالهمسئله ای که باعث ایجاد سرریز بافر می‌شود این است که آدرس برگشت فراخوانی تابع هم در پشته ذخیره می‌شود و از آنجا که سرریز شدن یک متغیر محلی می‌تواند باعث شود آدرس برگشت تابع در پشته بازنویسی شود، یک کاربر خرابکار قادر خواهد بود هر کدی که می‌خواهد را اجرا کند. <ref>http://www.freebsd.org/doc/en/books/developers-handbook/secure-bufferov.html</ref>
 
== جلوگیری ==
خط ۱۵۵:
 
{{داده‌های کتابخانه‌ای}}
 
[[رده:اشکالهای برنامه‌نویسی]]
[[رده:حافظه رایانه]]