seg fault occasionnel, disparait quand debug pas a pas

seg fault occasionnel, disparait quand debug pas a pas - ASM - Programmation

Marsh Posté le 22-04-2003 à 16:52:57    

.equ Delem,  8  # acces a la valeur a inserer
      .equ Dsuiv,  8  # acces a l�adresse de l�element suivant
      .equ Taille,  8  # taille d�un element de liste  
            # (valeur et adresse de l�element suivant )
 .data
tete�:  .long 0     # tete de la liste
valeur: .long 0    # valeur de l�element a inserer
 
 .text
 .global inserer
 
 
inserer:
 pushl %ebp
 movl %esp, %ebp
 pushal      
 movl Delem(%ebp),  valeur  
 
la derniere ligne pose probleme
 
Error: too many memory references for `mov'
je voudrais mettre une valeur dans valeur
 
une idee de pourquoi ca veut po? :'(


Message édité par theorie du chaos le 23-04-2003 à 08:26:39
Reply

Marsh Posté le 22-04-2003 à 16:52:57   

Reply

Marsh Posté le 22-04-2003 à 16:56:14    

movl Dsuiv(%ebx), tete  
 
ca aussi ca ne veut pas...
ca ne doit pas tolerer le mode d adressage :/

Reply

Marsh Posté le 22-04-2003 à 18:30:26    

eupe :/

Reply

Marsh Posté le 22-04-2003 à 20:00:04    

en deux temps : mettre la valeur dans un registre, puis le contenu du registre dans l'adresse.

Reply

Marsh Posté le 22-04-2003 à 20:03:36    

Theorie du chaos a écrit :

movl Dsuiv(%ebx), tete  
 
ca aussi ca ne veut pas...
ca ne doit pas tolerer le mode d adressage :/


 
yep, tu ne peux pas adresser a partir d'une variable, seulement d'un registre. Donc comme youdontcare l'a dit, tu copie la valeur de dsuiv dans un reg et tu adresse a partir de ce reg

Reply

Marsh Posté le 22-04-2003 à 20:08:35    

c pas pour l optimisation ca :/ :d

Reply

Marsh Posté le 22-04-2003 à 20:08:48    

merci :)

Reply

Marsh Posté le 22-04-2003 à 20:17:00    

Theorie du chaos a écrit :

c pas pour l optimisation ca :/ :d


 
ben t'as pas le choix, le format des instructions x86 interdit l'encodage de truc genre  
mov [ebp[eax]],20
 
alors bon [:spamafote]

Reply

Marsh Posté le 22-04-2003 à 21:39:54    

il se passe un truc bizarre quand je debug
 
au 1er lancement j ai un seg fault si je veux tout tester en bloc
 
et si je fais du pas a pas, ca passe tout seul...
 
ca peut etre du a quoi?

Reply

Marsh Posté le 23-04-2003 à 08:27:21    

up

Reply

Marsh Posté le 23-04-2003 à 08:27:21   

Reply

Marsh Posté le 23-04-2003 à 08:42:09    

a part ca ca trie :bounce:

Reply

Marsh Posté le 23-04-2003 à 09:00:10    

Veuillez saisir votre liste d'entiers et la terminer par -1
5
 
Program received signal SIGSEGV, Segmentation fault.
0x080485cb in inserer_debut ()
 
******************************************************************
 
Veuillez saisir votre liste d'entiers et la terminer par -1
5
 
Breakpoint 1, 0x080485cb in inserer_debut ()
(gdb) cont
Continuing.
 
 
je comprends pas

Reply

Marsh Posté le 23-04-2003 à 09:06:57    

Theorie du chaos a écrit :

je comprends pas
 


Nous non plus si tu ne postes pas au moins le source de inserer_debut()


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-04-2003 à 09:11:36    

     .equ Delem,  8  
      .equ Dsuiv,  4  
      .equ Taille,  8  
 
tete: .long 0   # tete de la liste
 
 .text
 .global inserer
 
inserer:
 pushl %ebp
 movl %esp,  %ebp
 pushal    
 movl Delem(%ebp), %edi    # edi = integer
     
creer_element:
 pushl $Taille
       call malloc                  # resultat dans eax  
      addl $4,  %esp  
        movl %edi,  (%eax)  
 
rechercher_place:
 movl tete,  %ecx #ecx = 0
 movl $tete,  %ebx  
 cmpl $0,  %ecx  
 je inserer_debut  
 
inserer_debut:
 movl %eax, (%ebx)  
 movl %ecx, Dsuiv(%eax)
 
inserer est appele par un programme en C avec un integer en parametre


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:21:42    

Theorie du chaos a écrit :

inserer_debut:
 movl %eax, (%ebx)  


As tu vérifié ce que contient ebx ? Moi ce que je vois, c'est que tu lis le contenu de ebx, mais que tu ne l'initialises nulle part. Il est donc fort possible que tu lises une zone de mémoire interdite => Segfault.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-04-2003 à 09:23:48    

dans rechercher_place
je fais movl $tete, %ebx


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:31:25    

Theorie du chaos a écrit :

dans rechercher_place
je fais movl $tete, %ebx


ben normalement, ça veut dire que tu transfères la valeur de ebx dans tete, à moins que la syntaxe AT&T (que je connais juste de nom) n'inverse les opérandes :??:
sinon, essaies ceci :
 
inserer_debut:
movl %eax,(%ebx)
movl %edx,8
movl %ecx,(%eax+%edx)
 
sous réserve que la syntaxe soit correcte  :sweat:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-04-2003 à 09:34:02    

Harkonnen a écrit :


ben normalement, ça veut dire que tu transfères la valeur de ebx dans tete, à moins que la syntaxe AT&T (que je connais juste de nom) n'inverse les opérandes :??:


 
 
vi elle inverse, sinon ce genre de truc  
addl $4,  %esp  
ne passerait pas trop :D


Message édité par chrisbk le 23-04-2003 à 09:34:55
Reply

Marsh Posté le 23-04-2003 à 09:39:48    

NB: ce programme doit uniquement etre utilise avec debugeur et un point d arret a inserer_debut... :ange:
 
je vais mettre ca dans le compte rendu :d
 


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:46:11    

c est bien la premiere ligne de inserer_debut qui merde
 
je crois que un
movl %eax, tete  
marche pas...
 
je v tester


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:47:38    

ca passe a la compilation et a l assemblage, mais ca seg fault aussi...
 
le probleme est il du a la declaration de tete?


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:52:11    

Theorie du chaos a écrit :

ca passe a la compilation et a l assemblage, mais ca seg fault aussi...
 
le probleme est il du a la declaration de tete?


et si tu le mets dans une section .data ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-04-2003 à 09:54:22    

merci merci merci merci :) :) :)
c etait ca


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 23-04-2003 à 09:55:48    

:sol:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed