Stack-guard
Первым, кто бросил вызов переполняющимся буферам, был Stack-Guard, представляющий собой заплатку для компиляторов gcc и egs, распространяемую по лицензии GPL. Раньше его было можно скачать с www.cse.ogi.edu/DISC/projects/immunix/StackGuard или immunix.org, но сейчас эти ссылки мертвы, а проект заброшен. Исходный код сохранился только у "коллекционеров", как например: www.packetstormsecurity.org/UNIX/utilities/stackguard.
Возьмем следующую программу, с умышленно допущенной ошибкой переполнения, и посмотрим, сможет ли Stack-Guard ее защитить.
// дочерняя функция
f(char *msg)
{
// объявляем локальные переменные
int a; char buf[0x66];
// копируем аргумент в буфер без контроля длины,
// что на определенном этапе приводит к его переполнению
a = *strcpy(buf, msg);
// выходим из функции
return a;
}
// материнская функция
int main(int argv, char **argc)
{
int x; x = f(argc[1]);
}