השחתת זיכרון – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ קישורים
Felagund-bot (שיחה | תרומות)
מ בוט - מחליף דוגמא בדוגמה
שורה 1:
'''השחתת זכרון''' (Memory corruption) הוא סוג של [[באג]], אשר קורה כאשר מיקום ב[[זכרון מחשב]] או [[אוגר]] משוכתב באופן מקרי ולא מבוקר, כתוצאה משגיאה ב[[תכנות]]. טעות כזו יכולה לגרום לקריסה מיידית של ה[[תוכנה]] (למשל במקרה של כתיבה לכתובת 0, התוכנית תיזרק על ידי [[מערכת הפעלה|מערכת ההפעלה]] בעקבות שגיאת סגמנטציה). מנגד, ייתכן גם שהשגיאה לא תבוא לידי ביטוי למשך זמן רב, ורק עבור קלטים מסוימים יופיע פלט שגוי.
 
דוגמאדוגמה בולטת להשחתת זכרון היא נסיון גישה לתא ב[[מערך (מבנה נתונים)|מערך]] כאשר הוא אינו קיים. בעיה זו ניתן למצוא במרבית שפות התכנות, בחלקן תהיה הודעת שגיאה ובחלק - לא. למשל ב[[C (שפת תכנות)|שפת התכנות C]], תאים במערך מקבלים ערכים סדורים החל מ־0 ולא מ־1, ולכן למעשה התא ה־n (והאחרון) מקבל את התווית 1-n. טעות תכנותית נפוצה היא נסיון כתיבה לתא הלא קיים n, דבר אשר גורם להשחתת זכרון שלא בניהול המערך (אם כי, יש לציין שרוב הסיכויים שהזכרון הנפגע שייך לתוכנית הרצה ולא למערכת ההפעלה, כך שאין סכנה ממשית לתפקוד המחשב).
 
השחתת זיכרון עשויה להיות גם [[חור אבטחה (תכנות)|חור אבטחה]]. דוגמאדוגמה קלאסית לכך היא תוכנה המקבלת [[קלט]] באורך מסוים, ומנסה להציבו ב[[מחסנית (מבנה נתונים)|מחסנית]], מבלי לוודא שגודל הקלט אינו גדול מהמחסנית.
 
התוקף עשוי ליצור קלט המיועד להשחית את הזיכרון בתוכן מסוים, וכך, תיאורטית, להחדיר קוד זדוני שיאפשר חדירה למערכת.