J'ai une fonction principale qui appelle une autre fonction. J'ai lu dans de nombreux endroits que les éléments suivants se produit lorsqu'un appel de fonction a lieu:esp et ebp enregistre le comportement dans l'appel de fonction
push %ebp
movl %esp, %ebp
Mon but est de trouver le haut de la pile avant et après l'appel de fonction. Ce qui suit est mon principal:
#include <stdio.h>
long *ebp;
int main(){
asm("movl %ebp,ebp");
printf("Top of stack before calling function 0x%08x",ebp);
func();
return 0;
}
long *ebp;
long *ebp;
void func(){
asm("movl %esp,esp");
asm("movl %ebp,ebp");
printf("\n\n Top of stack after entering function 0x%08x",ebp);
printf("\n\n Top of stack before entering function 0x%08x",ebp+2);
}
Ma question est, si la déclaration d'impression principale donne la même valeur que la deuxième instruction d'impression Func, comme les deux donnent le haut de la pile avant d'entrer dans la fonction ?
Ce code écrit deux fois dans la variable esp mais ne l'imprime pas. Il écrit à ebp une fois et imprime ebp et ebp plus 2. Je ne pense pas que le code illustre réellement votre question. Si vous pouvez résoudre ce problème, je peux peut-être y répondre. – prl
Ouais désolé !! Je l'ai changé maintenant. – Ajayv
Vous faites quelque chose de mal, mais de toute façon, la valeur de esp différera d'au moins 4 en raison de l'adresse de retour placée sur la pile. Si vous êtes intéressé par les valeurs de registre, vous devriez probablement utiliser un débogueur et ne pas essayer de jouer avec inline asm. – Jester