IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Problème avec WriteFile


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème avec WriteFile
    Bonjour à tous !!

    Je débute depuis quelques jours l'assembleur et j'ai un léger souci avec WriteFile.

    La chaîne de caractères contenue dans le fichier texte de destination n'est pas celle que j'attend.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    TITLE Create_write_file : Creation et ecriture dans un fichier
     
    .386
    .model flat, stdcall
    option casemap:none
     
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
     
    .data
     
    File_Handle         DWORD       ?
    Chaine              BYTE        "test d'ecriture dans un fichier",0
    File_Name           BYTE        "exemple.txt",0
    Nbr_Octet_Ecrit     DWORD       ? 										
    BufSize=( $ - Chaine )
     
    .code
     
    start:
     
        INVOKE CreateFile, addr File_Name, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0
     
        mov File_Handle, eax
     
        INVOKE WriteFile, File_Handle, ADDR Chaine, BufSize , ADDR Nbr_Octet_Ecrit, 0
     
        INVOKE CloseHandle, File_Handle 
     
        INVOKE ExitProcess,0
     
    END start
    Lorsque j'ouvre le fichier exemple.txt avec le bloc note j'obtiens :
    test d'ecriture dans un fichier exemple.txt
    Bizarrement, WriteFile me rajoute le contenu de la variable "File_Name" dans mon fichier texte.
    Et si dans le code source, je mets la variable "File_Name" au dessus de la variable "Chaine", ben dans ce cas j'ai pas le contenu de la variable "File_Name" qui se retrouve dans exemple.txt ...

    Et si j'ouvre avec Wordpad, il y a 1 caractere en forme de rectange entre ... un fichier et exemple.txt ... et 4 caracteres identique apres exemple.txt o_O

    J'ai passé le code sous Ollydbg et la fonction CreateFile me retourne bien un numero d'handle ( 00000010h ) et la fonction WriteFile me retourne 00000001h, ce qui a l'air normal.

    Voila si quelqu'un avait une ptite idée ça serait sympa, car perso j'ai épuisé toute les miennes.

    Merci d'avance ...

    Bien à vous

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Il me semble que le problème vient de la longueur du buffer (BufSize) passée à WriteFile. Tu devrais déclarer BufSize juste après Chaine, sinon le calcul "$ - Chaine" est faux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    File_Handle         DWORD       ?
    Chaine              BYTE        "test d'ecriture dans un fichier",0
    BufSize=( $ - Chaine )
    File_Name           BYTE        "exemple.txt",0
    Nbr_Octet_Ecrit     DWORD       ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Alcatîz c'était exactement ca !!

    J'ai retrouvé dans mon livre le passage qui le confirme :

    Liste BYTE 10,20,30,40
    TailleListe = ( $ - liste )

    Il est essentiel que l'affectation de la valeur à TailleListe soit immédiatement située après la déclaration de Liste
    Ca marche nickel'o'chrome maintenant

    Merci encore

    Bien à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problèmes avec GetSaveFileName et WriteFile
    Par flo-1987 dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 15/04/2009, 11h51
  2. [Win API] problème avec WriteFile
    Par acryline dans le forum Windows
    Réponses: 5
    Dernier message: 02/11/2006, 09h26
  3. Problème d'écriture avec WriteFile
    Par Milowen dans le forum C++
    Réponses: 5
    Dernier message: 17/01/2006, 09h40
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo