print · rss · source

< Annexe C - Bochs en mode debug | TutoOS | Annexe E - Déboguer le noyau avec gdb >


Gérer les arguments sur la pile avec les Stack Frame

Avant que la pile soit utilisée, le pointeur de pile pointe sur la case mémoire juste avant le début de la pile :

Pour passer des paramètres à une fonction, plusieurs méthodes sont possibles :

  • utiliser les registres, mais celà limite le nombre de paramètres qu'on peut passer
  • empiler les paramètres sur la pile avec l'instruction push

L'instruction call permet ensuite d'appeler une fonction. Le processeur empile automatiquement le registre eip et éventuellement le registre cs afin de pouvoir poursuivre l'exécution du code principal une fois la fonction terminée :

Une fois dans la fonction, pour accéder aux paramètres passés en argument, il est possible de se baser sur la valeur du pointeur de pile esp. Mais celà pose un problème car la fonction peut être amenée à empiler des données, et la valeur de esp. Une solution simple est d'utiliser un registre dédié : le registre ebp.
La première instruction de la fonction va donc être de sauvegarder le registre ebp en l'empilant puis de placer dans ebp la valeur courante du pointeur de pile :

pushl   %ebp
movl    %esp, %ebp

Si une autre fonction est appelée, toutes les informations sont conservées sur la pile :


< Annexe C - Bochs en mode debug | TutoOS | Annexe E - Déboguer le noyau avec gdb >

print · rss · source
Page last modified on March 17, 2011, at 03:41 PM