[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