Problème manipulation du contexte d'exécution
Bonsoir,
J'étudie actuellement les contextes d'exécution en langage C. Pour cela, nous avons parfois à introduire du code assembleur modifiant les registres esp et ebp.
Voici un petit programme que j'ai créé pour essayer de comprendre le fonctionnement de la pile d'exécution.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
#include <stdio.h>
int esp, ebp;
/* Cette fonction replace les registres esp et ebp aux valeurs sauvegardées précedemement dans le main */
void f() {
asm("movl %0, %%esp\n"
:
:"r"(esp));
asm("movl %0, %%ebp\n"
:
:"r"(ebp));
}
int main(void) {
asm("movl %%esp, %0\n"
: "=r"(esp));
asm("movl %%ebp, %0\n"
: "=r"(ebp));
printf("esp = %x\n",esp);
printf("ebp = %x\n",ebp);
f();
return 0;
} |
Je compile ce code en 32 bits (gcc -m32) mais l'exécution m'indique une erreur de segmentation et j'aimerais comprendre d'où vient cette eurreur.
Merci d'avance pour votre aide.