URL:     https://linuxfr.org/forums/programmation-c--2/posts/essayer-de-recuperer-l-adresse-de-retour-d-une-fonction
Title:   essayer de recupérer l'adresse de retour d'une fonction
Authors: cosmoff
Date:    2020-07-22T16:31:14+02:00
License: CC By-SA
Tags:    
Score:   6


bonjour à tous,

J'essaye de récupérer l'adresse de retour stockée dans la pile puis de faire un jump sur cette adresse afin de revenir à mon main, je vous montre mon code puis vous explique ma démarche :

```C
    int addOne ( int value )
    {
    	char * ptr = (char*)&value; // la variable value est situé a RBP-0x14
    	void (*adresseDeRetour) (void) = (ptr + 28);
    	adresseDeRetour();
    	return ++value; //on arrive jamais ici
    }
    
    int main (int argc, char **argv)
    {	
    	printf("coucou\n");
    	int v = addOne(65);    
    	return 0;
    }
```

en regardant via la commande : objdump -M intel -DTCs ./a.out , on voit que ma variable value est stocké à la position RBP-0x14, donc je fais un (ptr + 20) afin d'etre au niveau du RBP qui est stocké dans la RAM, puis je fais + 8 (car RBP est un registre de 8 octet afin de récupérer l'adresse de retour, d'ou le (ptr + 28). Puis je fais adresseDeRetour() afin de ratterrir dans mon main() mais j'ai en sortie :

coucou
Erreur de segmentation

Pour moi au niveau de la RAM quand la fonction addOne est appelé, le processeur fait :
->on stock l'adresse de retour
->on stock RBP
->j'ajoute les arguments de la fonction ...

avez vous une idée de comment faire ?

merci d'avance pour votre aide
