[SOS] problème de pile
goyet christopher
gc402395 at messetud.unice.fr
Dim 4 Déc 21:54:35 CET 2005
Salut,
j'ai deja eu ce probleme moi aussi...
Essaye de passer 2 parametres avec 2push.
Normalement si ma memoire est bonne, le 2eme parametre devrai etre le
1er dans le main, le 3eme le 2d dans le main etc...
Cela viens du jmp vers le main qui est juste en dessous.
D'habitude pour appeler une fonction on utilise un call, qui push
l'adresse de retour; or ici on ne le fait pas et le main en C va
chercher trop loin le parametre dans la pile... Je crois que c'est
l'explication j'espere que j'ai ete clair... Tu devrai regarder le
patch pour larticle 7.5 que j'ai envoye je passe des parametres au
main dedans
Christopher
> Je vous ecrit car j ai une petite question :
> (ps : j utilise le code souce de l'article 1)
>
> comment passer des paramètres à la fonction cmain en utilisant le
bootloader
> bootsect.s (dossier extras) ?
> ==============================================================
>
> En principe si on fait un push juste après l'initialisation de la
pile, on
> devrait le récupéré comme paramètre dans la fonction cmain. ( en
fait comme
> dans bootstrap avec le nombre magic de grub)
> Mais le problème c'est que ca ne marche pas ! je recupère le nombre
0
> quelque soit le nombre que je met dans la pile
>
> problème de pile apres avoir charger le noyau cmain ???
> ==================================================
> Pour contourner le problème j'essaye de le récupéré avec un pop dans
le
> cmain (en fesant appel a de l'assembleur inline)
> => même problème le nombre que je recupère apres un pop est toujour
e nombre
> 0
>
> dans bootsect.s je fait :
> pushl $20
> ljmp $0x8, $sos_main
>
> dans main.c fonction sos_main
>
> asm volatile( "popl %%eax; \
> movl %%eax,%0;"
> :"=r" (magic)
> :\
> :"%eax");
>
> Et j'obtient magic=0 au lieu de 20
> Pourtant on utilise la même pile lors du push dans bootsect.s et le
pop dans
> main.c ...
>
> merci :)
Plus d'informations sur la liste de diffusion Sos