Un programme copie un mot saisi dans un tampon de 12 caractères, sans vérifier sa longueur. Le mot fait 16 caractères.
Objectif
Chiffrer l'écrasement, puis ce qu'une copie bornée aurait conservé.
La copie non bornée
void copie(char *destination, char *source) {
int i = 0;
while (source[i] != 0) { destination[i] = source[i]; i++; }
destination[i] = 0;
}
Ce qui se trouve juste après le tampon
Sur la pile, les autres variables locales de la fonction et l'adresse de retour. Écraser cette adresse permet, dans certaines conditions, de détourner l'exécution du programme : c'est le mécanisme historique du débordement de tampon, et il tient entièrement dans un texte plus long que la place prévue.