seg fault occasionnel, disparait quand debug pas a pas - ASM - Programmation
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
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.
Marsh Posté le 22-04-2003 à 20:03:36
Theorie du chaos a écrit : movl Dsuiv(%ebx), tete |
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
Marsh Posté le 22-04-2003 à 20:17:00
Theorie du chaos a écrit : c pas pour l optimisation ca |
ben t'as pas le choix, le format des instructions x86 interdit l'encodage de truc genre
mov [ebp[eax]],20
alors bon
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?
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
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()
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
Marsh Posté le 23-04-2003 à 09:21:42
Theorie du chaos a écrit : inserer_debut: |
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.
Marsh Posté le 23-04-2003 à 09:23:48
dans rechercher_place
je fais movl $tete, %ebx
Marsh Posté le 23-04-2003 à 09:31:25
Theorie du chaos a écrit : dans rechercher_place |
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
Marsh Posté le 23-04-2003 à 09:34:02
Harkonnen a écrit : |
vi elle inverse, sinon ce genre de truc
addl $4, %esp
ne passerait pas trop
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...
je vais mettre ca dans le compte rendu
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
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?
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... |
et si tu le mets dans une section .data ?
Marsh Posté le 23-04-2003 à 09:54:22
merci merci merci merci
c etait ca
Marsh Posté le 23-04-2003 à 09:55:48
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