בקטע הקוד שנתת, הפונקציה main, מקצה על המחסנית זיכרון בגודל 200 בתים, עבור המשתנה buff, ומבקשת מהמשתמש להכניס קלט.
מכיוון שזוהי הפונקציה fgets, שבניגוד ל-gets, אינה מאפשרת לעבור את גבול הזיכרון שהוקצה לה, צריך קצת להתחכם:ע"י Debugger, ניתן לבדוק, כנראה, היכן מתחילה המחסנית, והיכן היא מסתיימת...כמו כן, ניתן לראות את המבנה שלה (מקום שמור ל-buff, לערך המוחזר, לכתובת החזרה וכו'...).
אני לא בקיא באסמבלי, אבל אני מבין, פחות או יותר, שעל ההתחלה והסיום של המחסנית, ועל הכתובת לחזרה, אחראים רגיסטרים מיוחדים קבועים.
אם נוכל לשנות להם את הערך, נוכל לקבוע מחדש את מבנה המחסנית, וכך, להכניס כפלט קטע קוד שיבצע פעולות.
אם כן, אפשר לכתוב קטע קוד באסמבלי, שמשנה את ערך הרגיסטרים למה שנחוץ לנו, ככה שהכתובת לחזרה, תהיה הכתובת של ההתחלה של המשתנה buff.
נפעיל את התוכנית המקורית, וכעת גם את התוכנית לשינוי ערך הרגיסטרים, נכניס כפלט קטע קוד שנרצה (כמובן שהוא חייב להיות בשפת אסמבלי, כלומר מכונה), ועכשיו, המחשב עיבצע את הקוד...
הדבר הזה נראה לי קצת מוזר, ולכן אני לא כל כך בטוח במה שהרגע כתבתי, מכיוון שזוהי שיטה שאפשר לעשות על כל דבר...ולכן, זה לא הגיוני כל כך, בגלל שזהו חור אבטחה שלא ניתן לחסימה.
בכל מקרה, אני עכשיו מבין מהם "חורי האבטחה" של Microsoft (בעיקר), וכנראה שמדברים על דברים מהסוג הזה.