Bonjour,
Quelqu'un peut m'expliquer la différence entre l'adresse de retour et EIP. Ça a l'air d'être la même chose mais je ne suis pas sur.
Merci de vos réponses
Car sur mon debugger le EIP n'a pas la même adresse que l'adresse de retour
Je pense que eip c'est le "instruction pointer" en 32 bit. (et 64 bit?) donc il pointe sur la ligne assembleur courante (enfin la position en memoire qui correspond a l'instruction de la ligne assembleur courante.)
Mais que veux tu dire par la ligne assembleur courante?
Apperemment le EIP c'est la prochaine instruction a executer (d'après google)
c'est ca que je veux dire. Ca dit quelle instruction tu es entrain d'executer. (ou la prochaine que tu va executer en fonction de la ou tu en es dans le pipeline d'execution). Basiquement quand tu fais l'etape instruction fetch, tu lis l'instruction qui est a l'adresse stocke par eip.
Ok merci beaucoup godrik
Mais un autre vient me confondre avec ca, c'est quoi au juste un "offset"?
un "offset" c'est juste un decalage. C'est utilise dans plein de contexte different. En C tu fais souvent des truc comme bouge un pointer d'un element sur le cote genre:
char* a = malloc(foobar);
a += 1; // parceque ailleurs tu veux pouvoir faire a[-1];
Donc tu as decaler a de 1. En bref tu as mis un offset sur a.
Ca arrive aussi quand tu met un tableau 2D dans un tableau 1D et tu fais un truc du genre image[i+j*sizeligne]; ici "j*sizeligne" c'est un offset.
Merci