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.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Merci d'avance pour votre aide.
Partager