לדלג לתוכן

תרגול חקירת השחתה ודליפות

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

משימות החקירה

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

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

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

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

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