Я проходжу курс в коледжі, де однією з лабораторій є виконання подвигів переповнення буфера за кодом, який вони нам дають. Це варіюється від простих подвигів, таких як зміна повернення функції для стека для повернення до іншої функції, аж до коду, який змінює стан реєстру програм / стан пам'яті, але потім повертається до функції, яку ви викликали, тобто Функція, яку ви назвали, повністю не забуває про подвиг.
Я провів деякі дослідження з цього питання, і подібні подвиги використовуються майже всюди навіть зараз, у таких речах, як запуск домашньої версії по Wii та непідвладна джейлбрейк для iOS 4.3.1
Моє запитання, чому цю проблему так важко виправити? Очевидно, що це один з головних подвигів, який використовується для злому сотень речей, але, схоже, це було б досить легко виправити, просто обрізавши будь-який вхід за допустиму довжину, і просто дезінфікувати весь вхід, який ви берете.
EDIT: Ще одна точка зору, на яку я хотів би розглянути відповіді - чому творці C не вирішують ці проблеми шляхом повторного втілення бібліотек?