Я провожу курс в колледже, где одна из лабораторий заключается в выполнении эксплойтов по переполнению буфера для кода, который они нам дают. Это варьируется от простых эксплойтов, таких как изменение адреса возврата для функции в стеке для возврата к другой функции, вплоть до кода, который изменяет состояние регистра / памяти программы, но затем возвращает к функции, которую вы вызвали, что означает, что вызванная вами функция совершенно не обращает внимания на эксплойт.
Я провел некоторое исследование в этой области, и подобные виды эксплойтов даже сейчас используются повсеместно, например, для запуска homebrew на Wii и отвязанного джейлбрейка для iOS 4.3.1.
Мой вопрос: почему эту проблему так трудно решить? Очевидно, что это один из основных эксплойтов, используемых для взлома сотен вещей, но кажется, что это будет довольно легко исправить, просто обрезав любой ввод за допустимую длину и просто очистив весь ввод, который вы берете.
РЕДАКТИРОВАТЬ: Еще одна точка зрения, которую я хотел бы рассмотреть ответы - почему создатели C не исправить эти проблемы путем переопределения библиотек?