[LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Page 2 sur 2 Précédent  1, 2

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

[LMIC] merci

Message  john le Sam 03 Mai 2008, 00:42

ah ok merci Georges Wink

john

Nombre de messages : 64
Prénom : john
Statut : 2ème Reseaux
Date d'inscription : 25/11/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Sam 03 Mai 2008, 23:58

Je voulais juste savoir s'il était néanmois possible de créer des variables pour contenir une ligne (donc comme buffer) mais qui ne sera utiliser QUE dans traiterFichier, on passant son addresse sur la pile au méthodes lireLigne, écrireLigne, et estPalindrome. Merci Smile

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Dim 04 Mai 2008, 00:45

Jiraiya-08 a écrit:Je voulais juste savoir s'il était néanmois possible de créer des variables pour contenir une ligne (donc comme buffer) mais qui ne sera utiliser QUE dans traiterFichier, on passant son addresse sur la pile au méthodes lireLigne, écrireLigne, et estPalindrome. Merci Smile
aucun problème s'il s'agit d'une variable temporaire. si tu veux un tampon de lecture de 1024 octets, crée un trou de 1024 octets dans la pile. fait alors bien attention que le début de ce buffer est vers le haut de la pile Very Happy








_________________

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: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Dim 04 Mai 2008, 13:30

nvs a écrit:
Jiraiya-08 a écrit:Je voulais juste savoir s'il était néanmois possible de créer des variables pour contenir une ligne (donc comme buffer) mais qui ne sera utiliser QUE dans traiterFichier, on passant son addresse sur la pile au méthodes lireLigne, écrireLigne, et estPalindrome. Merci Smile
aucun problème s'il s'agit d'une variable temporaire. si tu veux un tampon de lecture de 1024 octets, crée un trou de 1024 octets dans la pile. fait alors bien attention que le début de ce buffer est vers le haut de la pile Very Happy$


Merci de votre réponse monsieur. Mais le fait est que je ne vois à aucun endroit dans les slides de monsieur pbt un endoit où on parle de trou... silent

Et de plus, je n'ai pas utilisé ce concept ni en classe, ni au labo.... Sad


Pourriez-vous m'expliquer en quoi consister cela s'il vous plait ?

Merci énormément pour votre aide :-D

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Dim 04 Mai 2008, 14:57

Jiraiya-08 a écrit:Merci de votre réponse monsieur. Mais le fait est que je ne vois à aucun endroit dans les slides de monsieur pbt un endoit où on parle de trou... silent
c'est expliqué aux pages 112 et 113 du cours, avec tasm, mais c'est idem sous nasm.

tu trouveras ici un exemple (également disponible dans mon eDistri) supplémentaire d'utilisation de variables locales et de fonction avec arguments transmis par la pile, en deux versions : une pour nasm, l'autre pour tasm. je n'ai pas le dessin correspondant de la pile sous forme électronique : je préfère le réaliser en live au tableau. je te conseille de suivre l'évolution du programme et de (re)dessiner la pile au fur et à mesure qu'on y accède Smile





_________________

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: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Dim 04 Mai 2008, 15:53

Merci énormément pour votre aide monsieur nvs Smile

En fair, j'ai fais pour être sur de comprendre un petit schéma de la pile pour l'exemple que vous donnez pour nasm. Le voici :



Est-il correcte ??? Merci

Sinon, une chose me dérange encore:

Comment faire pour mettre sur la pile l'addresse de mon buffer de lecture comme je le faisais ici:

Code:

      push ECX            ; ECX contient le FD
      push dword ligne    ; L'addresse du buffer qui va contenir la ligne.
      push 1024          ; on met une limite de 1024 caractères dans 1 ligne.
      call lireLigne
      add ESP, 4*3

Je ne vois pas... Faut-il faire au lieu de "push dword ligne" ceci :
Code:

      push dword EBP-1024

Merci encore ! Very Happy


Dernière édition par Jiraiya-08 le Dim 04 Mai 2008, 16:08, édité 1 fois

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Dim 04 Mai 2008, 16:03

Jiraiya-08 a écrit:

Est-il correcte ???
oui, ça me semble correct. la situation se complexifie lorsqu'on appelle puis qu'on entre dans le fonction brol. continue à dessiner la pile et la situation devrait te sembler claire (compliquée mais claire).

Jiraiya-08 a écrit:Comment faire pour mettre sur la pile l'addresse de mon buffer de lecture comme je le faisais ici:

Code:

      push ECX            ; ECX contient le FD
      push dword ligne    ; L'addresse du buffer qui va contenir la ligne.
      push 1024          ; on met une limite de 500 caractères dans 1 ligne.
      call lireLigne
      add ESP, 4*3

Je ne vois pas... Faut-il faire au lieu de "push dword ligne" ceci :
Code:

      push dword EBP-1024
cette situation apparaît dans un autre code (lignes 48-50) déjà en ligne. on ne peut malheureusement pas écrire :
Code:
push dword EBP-1024
une parade (si vous en avez une meilleure, je suis preneur) est :
Code:
mov esi,ebp  ; attention : le contenu initial de esi est perdu
sub esi,1024
push esi
si aucun registre n'est disponible, on peut aussi envisager :
Code:
sub ebp,1024
push ebp
add ebp,1024






_________________

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: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Dim 04 Mai 2008, 16:16

nvs a écrit:
cette situation apparaît dans un autre code (lignes 48-50) déjà en ligne. on ne peut malheureusement pas écrire :
Code:
push dword EBP-1024
une parade (si vous en avez une meilleure, je suis preneur) est :
Code:
mov esi,ebp  ; attention : le contenu initial de esi est perdu
sub esi,1024
push esi
si aucun registre n'est disponible, on peut aussi envisager :
Code:
sub ebp,1024
push ebp
add ebp,1024

Mais alors, dans le code de lireLigne, faudra-t-il modifier des éléments pour ne plus regarder dans le Data Segment mais dans le Stask Segment ????

Merci Very Happy

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Dim 04 Mai 2008, 19:04

Jiraiya-08 a écrit:Mais alors, dans le code de lireLigne, faudra-t-il modifier des éléments pour ne plus regarder dans le Data Segment mais dans le Stask Segment ????
très bonne question Wink

il s'avère qu'en linux, on travaille en mode protégé avec un adressage à plat (flat). on en parle, très brièvement, dans les notes de cours à la page 131. avec cet adressage, les segments de donnée, pile et code sont confondus. il n'y a qu'un seul segment. tu peux donc faire [ebx] ou [ebp], voire même [eax], l'indirection (ou le déréférencement), c'est-à-dire la récupération de ce qui se trouve à l'adresse stockée dans ebx, ebp ou eax, respectivement, se passe toujours dans le bon segment (sauf si tu tentes d'en déborder => segmentation fault). tu ne dois donc pas te soucier dans quel segment tu te trouves puisqu'il n'y en a qu'un. attention, cela ne vaut que sous linux. en mode réel, tu dois bien faire attention au segment, comme tu l'indiques Smile





_________________

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: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Dim 04 Mai 2008, 19:43

nvs a écrit:
Jiraiya-08 a écrit:Mais alors, dans le code de lireLigne, faudra-t-il modifier des éléments pour ne plus regarder dans le Data Segment mais dans le Stask Segment ????
très bonne question Wink

il s'avère qu'en linux, on travaille en mode protégé avec un adressage à plat (flat). on en parle, très brièvement, dans les notes de cours à la page 131. avec cet adressage, les segments de donnée, pile et code sont confondus. il n'y a qu'un seul segment. tu peux donc faire [ebx] ou [ebp], voire même [eax], l'indirection (ou le déréférencement), c'est-à-dire la récupération de ce qui se trouve à l'adresse stockée dans ebx, ebp ou eax, respectivement, se passe toujours dans le bon segment (sauf si tu tentes d'en déborder => segmentation fault). tu ne dois donc pas te soucier dans quel segment tu te trouves puisqu'il n'y en a qu'un. attention, cela ne vaut que sous linux. en mode réel, tu dois bien faire attention au segment, comme tu l'indiques Smile

Merci encore une fois pour votre réponse, vous me rassurez ^^

Une petite chose encore (je sais, j'abuse de votre aimabilité, désolé Razz )

Puis-je savoir à quel moment je risque de depasser de la pile ???

pour le moment, je réserve dans la pile 1024 Bytes (=caractères, en ascii) pour une ligne, de quoi donner de la marge. Cela peut-il poser problème à un moment ou à un autre ? Question

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Dim 04 Mai 2008, 20:09

Jiraiya-08 a écrit:Une petite chose encore (je sais, j'abuse de votre aimabilité, désolé Razz )
il n'y a pas de problème. je réponds parce que je veux bien. rassure-toi donc, je ne me sens absolument pas obligé. je ne promets d'ailleurs pas de toujours être aussi disponible.

Jiraiya-08 a écrit:Puis-je savoir à quel moment je risque de depasser de la pile ???

pour le moment, je réserve dans la pile 1024 Bytes (=caractères, en ascii) pour une ligne, de quoi donner de la marge. Cela peut-il poser problème à un moment ou à un autre ? Question
ça aussi c'est une bonne question. et ce coup-ci, je n'ai pas de réponse. je ne sais pas très bien quelle est la taille de ce segment unique. sa taille théorique maximale est de 4 Gi (2^32) mots mémoire. quoi qu'il en soit, tu peux y aller gaiement. ne crains pas de réserver quelques kio voire Mio. si je me rappelle bien, jean-claude jaumain s'y est déjà essayé sans souci.

peut-être en saurais-je plus l'année prochaine, mais j'espère alors ne pas devoir te le dire 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: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Contenu sponsorisé Aujourd'hui à 15:18


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

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