Web Analytics
Privacy Policy Cookie Policy Terms and Conditions השחתת זיכרון - ויקיפדיה

השחתת זיכרון

מתוך ויקיפדיה, האנציקלופדיה החופשית

השחתת זכרון (Memory corruption) הוא סוג של באג, אשר קורה כאשר מיקום בזכרון מחשב או אוגר משוכתב באופן מקרי ולא מבוקר, כתוצאה משגיאה בתכנות. טעות כזו יכולה לגרום לקריסה מיידית של התוכנה (למשל במקרה של כתיבה לכתובת 0, התוכנית תיזרק על ידי מערכת ההפעלה בעקבות שגיאת סגמנטציה). מנגד, ייתכן גם שהשגיאה לא תבוא לידי ביטוי למשך זמן רב, ורק עבור קלטים מסוימים יופיע פלט שגוי.

דוגמה בולטת להשחתת זכרון היא נסיון גישה לתא במערך כאשר הוא אינו קיים. בעיה זו ניתן למצוא במרבית שפות התכנות, בחלקן תהיה הודעת שגיאה ובחלק - לא. למשל בשפת התכנות C, תאים במערך מקבלים ערכים סדורים החל מ־0 ולא מ־1, ולכן למעשה התא ה־n (והאחרון) מקבל את התווית 1-n. טעות תכנותית נפוצה היא נסיון כתיבה לתא הלא קיים n, דבר אשר גורם להשחתת זכרון שלא בניהול המערך (אם כי, יש לציין שרוב הסיכויים שהזכרון הנפגע שייך לתוכנית הרצה ולא למערכת ההפעלה, כך שאין סכנה ממשית לתפקוד המחשב).

תוכן עניינים

[עריכה] תקיפה זדונית של הצפת מערך (Buffer Overflow)

השחתת זיכרון עשויה להיות גם חור אבטחה. התקיפה הנפוצה ביותר מסוג זה מכונה "הצפת מערך".

בתכנות, כאשר קוראים לפונקציה מתוך תוכנית, למעשה עוצרים את רצף הקוד הנוכחי כדי לבצע סדרה של פקודות שנמצאת במקום אחר (שבו מוגדרת הפונקציה). המעבד "קופץ" משורת הקוד שקראה לפונקציה אל שורת הקוד הראשונה של הפונקציה, ושומר מספר פרמטרים על גבי המחסנית שמשמשת את התהליך. פרמטרים אלה הם פרטים שהפונקציה צריכה כדי לפעול, ובנוסף להם צריך לשמור גם את כתובת החזרה, על מנת שבסיום ביצוע הפונקציה המעבד יוכל "לקפוץ" חזרה למקום שממנו הפונקציה נקראה ולהמשיך לבצע את הקוד של התוכנית. כל הפרמטרים האלה וגם המשתנים הפנימיים של הפונקציה מוגדרים על המחסנית, ושם מוקצה להם כמות הזיכרון הדרושה להם.

פונקציות שמתעסקות עם קלט שמושם לתוך מערכים ולא בודקות את גודלם לפני שהן מבצעות את ההשמה הן חשופות להתקפה של הצפת מערך. אחד הפרמטרים שניתנים לפונקציה במקרה זה הוא התוכן שיש לשים במערך. התוקף יבקש למלא את המערך בתוכן שהוא בכוונה גדול מאוד, יותר גדול מהממדים של המערך.

כאשר הפונקציה מנסה למלא את המערך בתוכן שקיבלה, נגמר לה המקום במערך לפני שנגמר התוכן למילוי. מאחר שהיא מבצעת את ההשמה בלי לבדוק, היא תמשיך למלא את המחסנית בתוכן ותדרוס נתונים אחרים שנכתבו בה. הקלט הזדוני דורס בכוונה את כתובת החזרה מהפונקציה עם הכתובת של תחילת אותו מערך. בצורה זו, כשיסתיים ביצוע הפונקציה, המעבד "יקפוץ" לא להמשך התוכנית שקראה לה, אלא לתחילת המערך, ויתחיל להתייחס לנתונים שבמערך בתור פקודות לביצוע. הפקודות הללו יכולות להיות כל דבר שהוא, ולכן התוקף למעשה יכול לבצע כל שברצונו על המחשב שהריץ את התוכנית הזו.

[עריכה] התמודדות עם השחתת זיכרון

בשפות תכנות מסוימות, כגון Java מתבצעת בדיקה אוטומטית לתחומי המערך, ובדרך כלל ניסיון להשחתת זיכרון יוציא הודעת שגיאה. קיימים כלי תכנות אשר מזהים טעויות של גישה מעבר לגבולות מערך באופן אוטומטי, כגון Valgrind. כלים כאלה הם רבי ערך. מציאת באגים כאלה יכולה להיות קשה. לכן כלי תכנות אשר מזהים טעויות כאלה אוטומטית, כגון Valgrind, הם רבי ערך.

כיוון שמרבית התוכנות המסחריות מורכבות מקובצי מקור שונים שיצאו תחת ידיהם של מתכנתים שונים, זיהוי באגים אלה הופך לכמעט בלתי אפשרי, וגם פוגע בעקרון ההכמסה של תכנות מונחה עצמים.

[עריכה] ראו גם

[עריכה] קישורים חיצוניים

שפות אחרות
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu