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

תוכן שנמחק תוכן שנוסף
סתם קריאה לא משחיתה זיכרון, סתם מחזירה זבל
תגיות: עריכה ממכשיר נייד עריכה דרך האתר הנייד
←‏תקיפה זדונית של גלישת חוצץ (Buffer Overflow): השם היה שגוי, כמו כן לא ניתן בדרך כלל להריץ קוד שכתוב על המחסנית
תגיות: עריכה ממכשיר נייד עריכה דרך האתר הנייד
שורה 3:
דוגמה בולטת להשחתת זיכרון היא ניסיון כתיבה לתא ב[[מערך (מבנה נתונים)|מערך]] כאשר הוא אינו קיים. בעיה זו ניתן למצוא במרבית שפות התכנות, בחלקן תהיה הודעת שגיאה ובחלק - לא. למשל ב[[C (שפת תכנות)|שפת התכנות C]], תאים במערך מקבלים ערכים סדורים החל מ־0 ולא מ־1, ולכן למעשה התא ה־n (והאחרון) מקבל את התווית 1-n. טעות תכנותית נפוצה היא ניסיון כתיבה לתא הלא קיים n, דבר אשר גורם להשחתת זיכרון שלא בניהול המערך (אם כי, יש לציין שרוב הסיכויים שהזיכרון הנפגע שייך לתוכנית הרצה ולא למערכת ההפעלה, כך שאין סכנה ממשית לתפקוד המחשב).
 
==תקיפה זדונית של הצפתגלישת מערךחוצץ (Buffer Overflow)==
השחתת זיכרון עשויה להיות גם [[חור אבטחה (תכנות)|חור אבטחה]]. התקיפה הנפוצה ביותר מסוג זה מכונה "הצפת[[גלישת מערך"חוצץ]].
 
בתכנות, כאשר קוראים לפונקציה מתוך תוכנית, למעשה עוצרים את רצף הקוד הנוכחי כדי לבצע סדרה של פקודות שנמצאת במקום אחר (שבו מוגדרת הפונקציה). המעבד "קופץ" משורת הקוד שקראה לפונקציה אל שורת הקוד הראשונה של הפונקציה, ושומר מספר פרמטרים על גבי המחסנית שמשמשת את התהליך. פרמטרים אלה הם פרטים שהפונקציה צריכה כדי לפעול, ובנוסף להם צריך לשמור גם את כתובת החזרה, על מנת שבסיום ביצוע הפונקציה המעבד יוכל "לקפוץ" חזרה למקום שממנו הפונקציה נקראה ולהמשיך לבצע את הקוד של התוכנית.
שורה 12:
התוקף יבקש למלא את המערך בתוכן שהוא בכוונה גדול מאוד, גדול יותר מהממדים של המערך.
 
כאשר הפונקציה מנסה למלא את המערך בתוכן שקיבלה, נגמר לה המקום במערך לפני שנגמר התוכן למילוי. מאחר שהיא מבצעת את ההשמה בלי לבדוק, היא תמשיך למלא את המחסנית בתוכן ותדרוס נתונים אחרים שנכתבו בה (מעבר לחומות של הפונקציה). הקלט הזדוני דורס בכוונה את כתובת החזרה מהפונקציה עם הכתובת של תחילתקטע אותוקוד מערךאחר. בצורה זו, כשיסתיים ביצוע הפונקציה, המעבד "יקפוץ" לא להמשך התוכנית שקראה לה, אלא לתחילת המערך, ויתחיל להתייחס לנתונים שבמערך בתור פקודותלתוכנית לביצועאחרת. הפקודות הללו יכולות להיות כל דבר שהוא, ולכן התוקף למעשה יכול לבצע כל שברצונו על המחשב שהריץ את התוכנית הזו.
 
==התמודדות עם השחתת זיכרון==