94
Science de la sécurité du système d’information
Deuxième partie
de la case mémoire où se trouve la valeur de la donnée pointée par lui, autrement
dit ce que l’on appelle habituellement son adresse. Le pointeur de pile (stack pointer)
est une donnée qui contient l’adresse du dernier élément empilé, ou en d’autres
termes l’adresse du sommet de la pile.
Un programme est généralement constitué de plusieurs sous-programmes ; à
chaque sous-programme correspondent des données locales : les valeurs des paramètres transmis lors de l’appel du sous-programme, des variables locales dont
la durée de vie est limitée à la période d’activité de ce sous-programme, et surtout l’adresse de retour vers le programme appelant, c’est-à-dire l’adresse de l’instruction qui devra être exécutée à la fin du sous-programme. L’ensemble de ces
données locales constitue le bloc d’activation (activation record) 4 de cet appel au
sous-programme, aussi appelé cadre de pile (stack frame).
La pile d’exécution d’un programme est une pile de blocs d’activation. Lors d’un
appel à un sous-programme, le bloc d’activation (ou cadre de pile) correspondant est créé et stocké sur la pile du programme. Lorsque le sous-programme se
termine, ce cadre de pile est détruit et le pointeur de pile pointe vers le cadre
précédent, qui est celui du programme appelant.
On observe qu’une telle organisation en pile autorise que soient présents en mémoire à un instant donné les blocs d’activation de plusieurs appels emboîtés au
même sous-programme, ce qui est indispensable pour les programmes récursifs,
qui s’appellent eux-mêmes ; ainsi chaque instance du sous-programme possède
son propre bloc d’activation, avec ses variables locales et ses arguments, sans interférence avec les autres instances. La figure 5.2 représente la pile d’un processus
Unix ; on notera qu’elle croît à l’envers, son sommet est vers le bas (vers les adresses
de plus faibles valeurs) ; le tas est une autre région de la mémoire du programme,
où sont allouées les zones nécessaires à des données de plus grande taille, tels les
tableaux.
Un débordement de tampon sur la pile consistera à altérer de façon fautive mais
soigneusement calculée, dans un programme légitime, une variable locale de type
chaîne de caractères, de façon que l’adresse de retour soit écrasée par l’adresse du
code malicieux placé là par le pirate ; ainsi ce sera ce code qui s’exécutera à la fin
de l’exécution du sous-programme.
4 Les auteurs de langue française traduisent souvent activation record par enregistrement d’activation,
qui me semble moins approprié que bloc d’activation.
Précédent

- 108/276

Suivant