[LMI1]Ce fameux TD3 !

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 20:10

Pour suivre la tendance des jeunes de l'ESI qui font leurs TD's le soir qui précède la remise du travail, j'ai commencé à analyser les exemples fournis avec le TD3.

Je rencontre un problème assez... étrange, dirons-nous.

Pour l'exemple n°6, voici ce que ça donne à l'exécution :

Code:
Allocation de mémoire supplémentaire réussie
./compil: line 4: 16950 Segmentation fault      ./$1

L'erreur vient probablement du fichier _end inexistant (est-ce normal?).

Autre chose plus étrange, lors de l'exécution de "./test", il ne m'affiche plus le 16950, mais uniquement un joli "Segmentation fault".

Quelqu'un a-t-il une idée? Sad

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mar 10 Mar 2009, 20:56

je viens de retester chez moi et bardaf ! segmentation fault Laughing après test sous ald, c'est à la ligne 42 que ça explose chez moi (quand on essaie d'écrire en _end + 5000).

le truc, c'est que je bosse depuis windows vista dans une machine virtuelle vmware sur une ubuntu 32 bits (machine virtuelle car j'ai déjà un dual boot avec une ubuntu 64 bits). j'ai testé tous les sources il y a quelques mois avec virtual box comme virtualiseur, et là ça tournait sans soucis. je suis passé à vmware car j'avais des problèmes de clavier avec virtualbox (plus de pipe par exemple, ce qui est assez embêtant quand on code).

soit.

j'ai repris le code td3n06.asm et j'ai change 5000 en 5 et 5001 en 6 partout où il faut et là ça s'exécute sans problème. j'en conclus qu'il ne faut pas être trop gourmand avec la mémoire Wink





_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 21:03

Testé et approuvé Wink

Merci bien !

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mar 10 Mar 2009, 21:07

Simple question
d'apres ce code situé apres le bloc d'ouverture
[ouverture]

MOV [handle],EAX
;positionnement tête de lecture
MOV EAX,19 ;appel systeme lseek
MOV EBX,[handle]
MOV ECX,9 ;deplacement de 9
MOV EDX,0 ;a partir du l'emplacement de depart
INT 0x80

CMP EAX,0
JL near MErreur2

Si mon fichier fait moins de 10 caracteres, lseek devrait retourner -1 et donc jump a MErreur2

Or, quand je regarde le contenu de EAX apres l'operation, peu importe le deplacement, EAX contient le deplacement.....
donc il ne jumpera jamais :'(
je peux prendre un joker ?
clown

ps: dessus depuis maintenant quelques heures :'(

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 21:42

Après avoir analyser entre deux baillements (c'est fatigant le boulot d'élève Razz) ton code, je remarque un truc :

la valeur de EAX renvoyée est égale au nombre d'octets parcouru.
Apparemment, il se fiche de savoir qu'on a dépasser les derniers caractères écrits dans le fichier.

Par élimination :

- EBADF : n'est pas un descripteur de fichier ouvert => c'est pas le cas
- EINVAL : si on est en dehors du périphérique (j'imagine mal faire sauter mon disque dur comme ça...) => c'est pas le cas
- EOVERFLOW : on ne sais pas représenter la position dans le fichier avec un registre (type EAX) : overflow => c'est pas le cas
- ESPIPE : si on utilise un pipe, un socket ou une file => c'est pas le cas.

Donc par élimination, on ne devrait pas avoir d'erreur, c'est le cas. Donc à priori, c'est correcte qu'il renvoie ce que tu as mis dans ECX

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mar 10 Mar 2009, 21:45

et comment je fais donc pour gérer mon cas de fichier de 9 caractères ^^
parce que là ya de quoi s'arracher les cheveux !

Theoriquement si il depasse, il me refile -1
or la avecun déplacement de 8, 9 ou 10 sa change rien sa continue à *@/]} !!!
Allez denver ! Aide moi =D

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 21:46

Ouai... Ou pas Laughing



J'édite quand je trouves la réponse Wink

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mar 10 Mar 2009, 21:55

Adieu monde cruel

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mar 10 Mar 2009, 22:07

en effet, la valeur retournée par lseek n'est pas très fiable. je te conseille de tenter une lecture d'un octet pour voir si tu débordes. attention, la lecture déplace la tête de lecture...




Question

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 22:11

Voili voilou comme promis :

Code:

global main
extern printd
;===========================
   section .bss
;===========================
handle   RESB   2   ; handle du fichier
dehors   RESB   1
fin      RESB   1
;===========================
   section .data
;===========================
fichier   DB   'fichier',0
erreur   DB   "erreur !",10
erreurt   DD   erreurt-erreur
;===========================
   section .code
;===========================
main:

   MOV   EAX,5
   MOV   EBX,fichier
   MOV   ECX,0
   int 0x80
   
   MOV   [handle],EAX
   
   MOV EAX,19 ;appel systeme lseek
   MOV EBX,[handle]
   MOV ECX,0 ;deplacement de x octets
   MOV EDX,0 ;a partir du l'emplacement de depart
   INT 0x80
   
   MOV   [dehors],EAX
   
   MOV   EAX,19
   MOV   EBX,[handle]
   MOV   ECX,0
   MOV   EDX,2
   int   0x80
   
   MOV   [fin],EAX
   
   MOV   EAX,[dehors]
   MOV   EBX,[fin]
   
   CMP   EAX,EBX
   JL   err
   
   JMP   fini

err:
   MOV   EAX,4
   MOV   EBX,1
   MOV   ECX,erreur
   MOV   EDX,[erreurt]
   int   0x80
   
   ; on compare où on est, avec la fin du fichier, si plus grand => error
   
   
   
fini:
   MOV   eax,1
   MOV   ebx,0 
   INT   0x80
; ==========================

edit : code à revoir, pas très fiable

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mar 10 Mar 2009, 22:14

c'est une autre option. la tentative de lecture me semble plus simple, à condition de rebobiner d'un octet si on n'est pas hors fichier...



Idea

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mar 10 Mar 2009, 22:17

je suppose que je dois changer des valeurs dans le code ci dessus ?
pcq uniquement des 0 je vois pas l'utilité [CORRIGE]

@mr NVS:
Donc je devrais faire une boucle d'appel systeme d'un read qui envoie le resultat dans une variable bidon et qui si il me retourne 0 incremente un cpt oO ?
Ensuite comparer ce compteur avec mon deplacement demandé ? (en l'occurence ici 9)


Dernière édition par XavBod le Mar 10 Mar 2009, 22:21, édité 1 fois

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mar 10 Mar 2009, 22:20

XavBod a écrit:je suppose que je dois changer des valeurs dans le code ci dessous ?
pcq uniquement des 0 je vosiaps l'utilité
je ne comprends rien à ce que tu écris. il y a un code en dessous ?

sinon, pour l'utilité, c'est essentiellement de devenir un disciple de l'église des ASMistes des jours derniers. ce qui n'est pas si mal...





cyclops

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 22:22

MOV EAX,19 ;appel systeme lseek
MOV EBX,[handle]
MOV ECX,9;deplacement de 9
MOV EDX,0 ;a partir du l'emplacement de depart
INT 0x80

Ici on ne change rien, on part du départ du fichier et on parcours 9 octets.

MOV EAX,19
MOV EBX,[handle]
MOV ECX,-1
MOV EDX,2
int 0x80

On part de la fin du fichier, on rebobine d'un octer, ici rien à changer non plus.

En principe le code que j'ai écris devrais fonctionner sur papier, il dois y avoir une erreur quelque part car la comparaison déconne :/

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mar 10 Mar 2009, 22:24

Bon allez , le jour ne se lève que dans 7 petites heures Laughing

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mar 10 Mar 2009, 22:25

XavBod a écrit:@mr NVS:
Donc je devrais faire une boucle d'appel systeme d'un read qui envoie le resultat dans une variable bidon et qui si il me retourne 0 incremente un cpt oO ?
Ensuite comparer ce compteur avec mon deplacement demandé ? (en l'occurence ici 9)
tu parles dans l'absolu ou en rapport direct avec l'exercice d'évaluation ?

dans l'absolu, tu fais ton lseek puis un read de 1 octet. si après lecture eax ne vaut pas 1, c'est que tu n'as rien lu. il y a donc de fortes chances que tu sois hors fichier. d'autres scénarios sont probablement possibles : panne, fichier corrompu, etc. si tu as lu, tu n'es pas hors fichier, avant de lire, et donc repositionne-toi de -1 octet pour revenir à la position testée.

dans le cadre de l'exercice d'évaluation, tu dois lire, donc la technique que je propose apparaît naturellement. de plus, tu parcours le fichier du début vers sa fin. tu ne déborderas donc qu'une seule fois...


Like a Star @ heaven

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mar 10 Mar 2009, 22:42

Est-ce que cette logique est correct? :

On ouvre le fichier,
on fait un appel système lseek pour se positionner au début du fichier (exemple),
on lit 1 octet à la fois,
on écrit l'octet à l'écran.

C'est barbare comme méthode, mais au moins on peut commencer à partir de x octet du début du fichier il me semble.

voici à quoi sa ressemble (non fonctionnel encore) :
Code:
lect:
   MOV   EAX,5 ; open
   MOV   EBX,fichier
   MOV   ECX,0
   int 0x80
   MOV   [handle],EAX
   
   
   
   MOV EAX,19 ; lseek
   MOV EBX,[handle]
   MOV ECX,1;deplacement de 9
   MOV EDX,0 ;a partir du l'emplacement de depart
   INT 0x80
   
   CMP   EAX,1
   JNE   fini
   
   MOV   EAX,3 ; read octet
   MOV   EBX,[handle]
   MOV   ECX,[buffer]
   MOV   EDX,1
   int   0x80
   
   MOV   EAX,4 ; write octet
   MOV   EBX,1
   MOV   ECX,buffer
   MOV   EDX,1
   int   0x80
   
   
   JMP   lect


   
fini:
   MOV   eax,1
   MOV   ebx,0 
   INT   0x80

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Invité le Mer 11 Mar 2009, 22:11

Toi tu ne lis pas les autres postes je pense, puisque je crois avoir posté dans un autre sujet de post sur TD3, la logique complete à utiliser pour l'ensemble de td3 je crois en avoir parlé dans le post , et si tu vx j px reposter le même message :

"en fait tu te positionne la 1ere fois que tu rentre dans la boucle traitement, à la pos 10, tu regarde si tu as pu te positionner en comparant la valeur de retour(-1 correspond à la fin du fichier), ensuie tu y lis(il fo aussi verifier la valeur de retour(si négatif alors c pa bon)), ensuite tu reserve(tu reserve ou mais à une adresse qui est dans notre cas le _end, mais mieux vaut le mettre dans un registre avant la boucle, qui pourra être incrementé dans ta boucle pour que tu puisse te positionner dans la memoire juste après le _end et donc reserver), et tu écrit à la pos ds la memoire que que tu as reservé(càd _end et les autres emplacements de la memoire qui la suivent), ensuite tu incremente un registre ou une variable qui joura le rôle du compteur de nb de caractères lus ou ecrits),

et voilà, le tour est joué, il te reste de boucler dans la boucle tout en effectuant les operations que j'ai écrite plus haut, donc tu incrementera le compteur à chaque fois que tu as pu effectuer toutes ces operations(1.se positionner;2.lire;3.reserver;4.ecrire dans ce que tu as reservé), et en fait ds ce pgm le nbr de caracteres lus et ecrits sera toujours le même.
j'espère que ça t'aidera"

Invité
Invité


Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  XavBod le Mer 11 Mar 2009, 22:17

Depuis quand c'est interdit de créer un new topic Laughing ?

XavBod

Nombre de messages : 196
Age : 26
Prénom : Xavier
Statut : Etudiant 3eme indu
Localisation : Woluwe
Date d'inscription : 27/09/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Mer 11 Mar 2009, 22:31

Newu_ a écrit:"en fait tu te positionne la 1ere fois que tu rentre dans la boucle traitement, à la pos 10, tu regarde si tu as pu te positionner en comparant la valeur de retour(-1 correspond à la fin du fichier),
es-tu bien sûr de toi ? as-tu testé avec ald ? j'ai l'impression que toi non plus, tu ne lis pas bien les posts. et en plus celui dans lequel tu interviens. XavBod n'a pas pris ce risque...
Newu_ a écrit:ensuie tu y lis(il fo aussi verifier la valeur de retour(si négatif alors c pa bon)),
ça c'est sûr, si read lit un nombre négatif de caractères, c'est pas bon, mais alors pas bon du tout Wink pour la suite, tu m'as l'air plus raisonnable.






_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Dj x-fuse le Mer 11 Mar 2009, 23:04

Ca c'est fait... Laughing

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Invité le Jeu 12 Mar 2009, 08:57

nvs a écrit:
Newu_ a écrit:"en fait tu te positionne la 1ere fois que tu rentre dans la boucle traitement, à la pos 10, tu regarde si tu as pu te positionner en comparant la valeur de retour(-1 correspond à la fin du fichier),
es-tu bien sûr de toi ? as-tu testé avec ald ? j'ai l'impression que toi non plus, tu ne lis pas bien les posts. et en plus celui dans lequel tu interviens. XavBod n'a pas pris ce risque...
Newu_ a écrit:ensuie tu y lis(il fo aussi verifier la valeur de retour(si négatif alors c pa bon)),
ça c'est sûr, si read lit un nombre négatif de caractères, c'est pas bon, mais alors pas bon du tout Wink pour la suite, tu m'as l'air plus raisonnable.






Beh je fais un double test, d'abord celui sur lseek, càd sa valeur de retour, et ensuite sur la valeur de retour de read.
Che pas si ça correspond à la reponse à votre remarque.
Mais en fait je n'ai pas très bien compris votre remarque pouvez vous svp m'eclairer.

Invité
Invité


Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Jeu 12 Mar 2009, 09:00

relis tranquillement ce post depuis son quatrième message et on en rediscute Smile






tongue

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Invité le Jeu 12 Mar 2009, 21:48

nvs a écrit:relis tranquillement ce post depuis son quatrième message et on en rediscute Smile






tongue

J'ai relu, et je n'ai pas comptris, dsl Shocked

Invité
Invité


Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  nvs le Jeu 12 Mar 2009, 22:39

bon ben on n'en rediscutera probablement pas alors Sad









_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI1]Ce fameux TD3 !

Message  Contenu sponsorisé Aujourd'hui à 12:37


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum