La valeur de retour dans la pile doit être juste avant ptr.
void(*adresseDeRetour)(void)=(&ptr-1);// Arythmétique pointeur, on se décale de la taille de la variable... soit un pointeur.
Mais ça ne marchera pas car tes registres SP et BP ne seront pas remis à jour correctement.
En gros si ça marchait, tu irais finir main puis au retour de main tu retournerais dans addOne pour la finir pour retourner encore dans main.
Avec l’aléa que l’accès à la variable v du main est relative au BP courant... donc tu jardines probablement la pile n’importe où, donc là ou ça casse une adresse de retour.
Édit: en fait baulieu à déjà répondu. J’avais lu trop vite.
[^] # Re: setjmp et longjmp
Posté par Anthony Jaguenaud . En réponse au message essayer de recupérer l'adresse de retour d'une fonction. Évalué à 2. Dernière modification le 24 juillet 2020 à 14:22.
La valeur de retour dans la pile doit être juste avant
ptr.Mais ça ne marchera pas car tes registres
SPetBPne seront pas remis à jour correctement.En gros si ça marchait, tu irais finir
mainpuis au retour demaintu retournerais dansaddOnepour la finir pour retourner encore dansmain.Avec l’aléa que l’accès à la variable
vdu main est relative auBPcourant... donc tu jardines probablement la pile n’importe où, donc là ou ça casse une adresse de retour.Édit: en fait baulieu à déjà répondu. J’avais lu trop vite.