From 2f023a33a5e04be8fcc1acfd6208b8242b737ddd Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Wed, 27 Sep 2023 23:00:14 +0200 Subject: [PATCH] Add base pointer paragraph --- .../secu_logicielle/5_appel_fonction/index.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/content/secu_logicielle/5_appel_fonction/index.md b/content/secu_logicielle/5_appel_fonction/index.md index ba9807b..087ffef 100644 --- a/content/secu_logicielle/5_appel_fonction/index.md +++ b/content/secu_logicielle/5_appel_fonction/index.md @@ -81,4 +81,31 @@ f: ## Le Base Pointer +Lors de l'entrée dans une fonction, nous sauvegardons l'adresse contenue dans +`ebp` sur la pile puis on copie l'adresse contenue dans `esp` dans `epb`, +```asm +f: + pushl %ebp ; on sauvegarde l'adresse contenue dans %ebp sur la pile + movl %esp, %ebp ; puis copier l'adresse courante d'%esp dans %ebp +``` + +Sur l'architecture x86, ces deux instructions peuvent être remplacées par le +mnémonique `enter`. + +Il nous est mainteant possible de retrouver simplement les paramètres passées à +notre fonction par rapport à `ebp` tout en instanciant des variables locales sur +la pile que nous retrouverons en fonction d'`esp`. **C'est à la fonction appelée +de mettre en place le *base pointer*** + +À la fin de notre fonction, nous allons positionner le retour dans `%eax` et +remettre les choses en places: + +```asm +;[...] +movl -4(%ebp), %eax ; on met notre valeur de retour dans %eax +movl %ebp, %esp ; on restaure %esp +popl %ebp ; on pop le haut de la pile dans %ebp on restaure ainsi + ; sa valeur avant l'appel de notre fonction +ret +```