خرابی حافظه

خرابی حافظه در یک برنامه کامپیوتری وقتی است که اطلاعات یک آدرس حافظه به خاطر عملکرد برنامه‌ای که از قصد برنامه‌نویس اصلی یا ساختارهای برنامه/زبان فراتر می‌رود، اصلاح شود. به این نقض ایمنی حافظه می‌گویند .
بیشترین دلایل خراب شدن حافظه، خطاهای برنامه نویسی ( نرم افزاری) است. هنگامی که محتویات حافظه خراب بعداً در آن برنامه استفاده می شود، منجر به خرابی برنامه یا عملکرد غیرعادی برنامه می شود. حدود 10 درصد از خرابی های برنامه در سیستم های ویندوز به خاطر خرابی heap است. 
زبان های برنامه نویسی مدرن مانند C و C++ ویژگی های قوی مدیریت حافظه و اشاره‌گر (علوم رایانه) دارند. 
این ویژگی ها طراحی شده اند که در توسعه برنامه های کاربردی و نرم افزار سیستمی کارآمد به ما کمک کنند . ولی استفاده نادرست از این ویژگی ها ممکن است باعث خطاهایی شود تخریب حافظه را به دنبال داشته باشد .

یکی از غیرقابل حل ترین خطاهای برنامه نویسی خرابی حافظه است، به دو دلیل که آنها را بررسی میکنیم :

منبع تخریب حافظه و آثار آن ممکن است دور از هم باشند و ارتباط دادن علت و معلول را دشوار می کند.
علائم در شرایط غیرمعمول ظاهر می‌شوند و بازتولید مداوم باعث دشوار شدن خطا میشود .
خطاهای خرابی حافظه را به چهار دسته طبقه بندی می‌کنیم :
استفاده از حافظه بدون مقدار اولیه : اطلاعات حافظه اولیه به عنوان اطلاعات زباله در نظر گرفته می شوند. استفاده از این مقادیر ممکن است باعث شود که برنامه عملکرد غیرقابل پیش بینی داشته باشد.
استفاده از حافظه غیراختصاصی : استفاده از اشاره گر برای دسترسی و تغییر حافظه رایج است. اگر چنین اشاره‌گری یک اشاره‌گر خالی ، اشاره‌گر معلق  (اشاره به حافظه‌ای است که قبلاً آزاد شده است)، یا به یک مکان حافظه خارج از پشته فعلی یا محدوده‌های پشته‌ای باشد، به حافظه‌ای اشاره دارد که برنامه آن را ندارد. 
استفاده از این اشاره گرها یک اشکال بزرگ برنامه نویسی می‌باشد. دسترسی به این حافظه ها معمولاً باعث ایجاد استثناهای سیستم عامل می شود که معمولاً منجر به خرابی برنامه می شود ( و یا برای حل مشکل از نرم افزار محافظ حافظه مناسب استفاده کنیم ).
استفاده از حافظه فراتر از حافظه اختصاص داده شده ( سرریز بافر ): اگر یک آرایه در یک حلقه، شرط های غلط برای خاتمه داشته باشد ، حافظه فراتر از مرزهای آرایه ممکن است به طور تصادفی تغییر کند . سرریز بافر یکی از رایج‌ترین اشتباهات برنامه‌نویسی است که توسط ویروس‌های کامپیوتری مورد سوء استفاده قرار می‌گیرد و مشکلات جدی امنیت رایانه (به عنوان مثال حمله بازگشت به libc ، محافظت در برابر سرریز بافر  ) در برنامه‌های پرکاربرد را به دنبال دارد . در برخی موارد، برنامه‌ها ممکن است قبل از شروع یک بافر، به اشتباه به حافظه دسترسی پیدا کنند.

مدیریت حافظه هیپ معیوب: نشت حافظه و آزادسازی حافظه غیر هیپ یا تخصیص نشده، رایج ترین خطاهای ناشی از مدیریت معیوب حافظه هیپ
بسیاری از دیباگر های حافظه مانند Purify ، Valgrind ، Parasoft C/C++test ، AddressSanitizerدر دسترس ما هستند و برای تشخیص خطاهای خرابی حافظه می‌توانیم از آنها استفاده کنیم.

همچنین ببینید:

[نقض ذخیره سازی] 

منابع:

"Application Verifier (Windows 7 and Windows Server 2008 R2 Application Quality Cookbook) - Win32 apps" (به انگلیسی). Microsoft Developer Network. Retrieved 2022-02-09.

لینک های خارجی

آموزش تخریب حافظه مقدمه ای بر تکنیک های بهره برداری و مکانیسم های حفاظتی
سوءاستفاده امنیتی از رایانه حافظه رایانه اشکال‌های برنامه‌نویسی