когда длинная строка копируется в буфер, размер которого меньше строки... в этом случае "хвост" данных помещается в стек и портит его содержимое, что и приводит к тому, что при выходе из функции управление получает тот самый "хвост", а не код программы...
в доке к библиотеке avr-libc написано буквально следующее: "...если программист настолько глуп или ленив, чтобы вызвать функцию strcpy() без того, чтобы узнать заранее необходимое место для копирования и его выделить..." в контексте этой уязвимости :)
по-моему, даже в мелкософте уже эти ошибки перестали совершать...