Bidouillage de fichiers.

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

Bidouillage de fichiers.

Message  frager50 le Mar 27 Avr 2010 - 20:19

Bonjours a tous.
Voila j'ai un soucis : j'ai codé un petit programme qui permet de lire un exécutable et d'écrire une copie de cet exécutable. Ce programme marche convenablement.

Mais voila j'ai voulu essayer en faisant passer ce que je lisais dans un autre fichier avant de le réécrire dans le nouvel exécutable. Mais le nouvel exécutable ne veut pas s'exécuter...

Voila le code :
Code:
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    FILE* base = NULL;
    FILE* text = NULL;
    FILE* exec = NULL;
    int c, d;


    base = fopen("Base.exe", "rb");//Ouverture en lecture seule de helloWord.exe qui est un programme qui affiche helloWord a l'ecran
    if (base != NULL)//Si l'ouverture de helloWord a fonctionnée
    {

        printf("Ouverture de Base.exe\n");
        text = fopen("text", "wb+");//Ouverture et creation de test.exe
        getchar();

        if (text != NULL)//Si l'ouverture de test.exe a fonctionnée
        {
            printf("Ouverture de text.txt\n");
            getchar();
            exec = fopen("exec.exe", "wb");

            if (exec != NULL)
            {
                printf("Ouverture de exec.exe\n");
                getchar();
                while ((c = getc(base)) != EOF)//Tant qu'on est pas arrive a la fin du fichier
                {

                    if (putc(c, text)== EOF) printf("\nEchec de l'ecriture dans text.txt");//On ecrit ce caractere dans text.txt
                    if((c = getc(text)) == EOF) printf("\nEchec de la lecture dans text.");//On lit le caractère qu'on vient d'ecrire dans text.txt
                    if (putc(c, exec)== EOF) printf("\nEchec de l'ecriture dans exec.exe");//On ecrit ce caractere dans exec.exe
                }



                fclose(exec);
            }
            else printf("Echec de l'ouverture de exec.exe");


            fclose(text);//Fermeture de test.exe
        }
        else printf("Echec de l'ouverture de text.txt");


        fclose(base);//Fermeture de helloWord.exe

    }

    else printf("Echec de l'ouverture de Base.exe");
    printf("Fin du programme.\n");

    getchar();
    return 0;
}
J'ai remarqué aussi que la taille de "texte" était 2 fois supérieur a celle des exécutables .

Excusez moi pour la qualité du code.

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  -ed- le Jeu 29 Avr 2010 - 11:29

Pour écrire, c'est pas "wb+", mais "wb".

Le fichier intermédiaire doit être traité comme un fichier binaire. on ne doit utiliser que "rb" et "wb" dans ce programme.

Ceci fonctionne. Il n'y a aucune raison de faire plus compliqué. On ne peut à la fois lire et écrire dans un fichier ...

Code:

#include <stdio.h>
#include <stdlib.h>

int copie (char const *dest, char const *src)
{
  int err = 0;
  FILE *fsrc = fopen (src, "rb"); /* Ouverture en lecture seule du fichier
                                      source qui est un programme qui affiche
                                      helloWord a l'ecran */
  printf ("Ouverture de '%s'\n", src);
  if (fsrc != NULL)
  {
      FILE *fdest = fopen (dest, "wb"); /* Ouverture et creation de test.exe */

      printf ("Copie dans '%s'\n", dest);

      if (fdest != NULL)        /* Si l'ouverture de test.exe a fonctionnée */
      {
        int c;
        /* Tant qu'on est pas arrive a la fin du fichier */
        while (!err && (c = getc (fsrc)) != EOF)
        {
            /* On ecrit ce caractere dans exec.exe */
            if (putc (c, fdest) == EOF)
            {
              printf ("\nEchec de l'ecriture dans '%s'", dest);
              err = 1;
            }
        }
        fclose (fdest);
      }
      else
      {
        printf ("Echec de l'ouverture de '%s'", dest);
        err = 1;
      }

      fclose (fsrc);            /* Fermeture de test.exe */
  }
  else
  {
      printf ("Echec de l'ouverture de '%s'", src);
      err = 1;
  }
  return err;

}

int main (void)
{
  system ("hello.exe");

  {
      int err = copie ("newhello.exe", "hello.exe");

      if (!err)
      {
        system ("newhello.exe");
      }
  }
  printf ("Fin du programme.\n");
  return 0;
}
ce qui donne :
Code:

hello world
Ouverture de 'hello.exe'
Copie dans 'newhello.exe'
hello world
Fin du programme.

Process returned 0 (0x0)  execution time : 0.128 s
Press any key to continue.

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  frager50 le Jeu 29 Avr 2010 - 18:50

J'ai déjà fait un code qui copie un exécutable dans un autre et le nouvel exécutable s'exécute. Mais je ne comprends pas que cela ne fonctionne pas en passant par un autre fichier ?!
Je pense qu'il faut ouvrir le fichier 'intermédiaire" en lecture-écriture.

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  -ed- le Jeu 29 Avr 2010 - 19:22

Je ne vois pas bien à quoi cert ce fichier intermédiaire. Tu veux faire ça ?
Code:

int main (void)
{
  system ("hello.exe");

  {
      int err = copie ("tmp.exe", "hello.exe");

      if (!err)
      {
          system ("tmp.exe");
       
        err = copie ("newhello.exe", "tmp.exe");
        if (!err)
        {
          system ("newhello.exe");
        }
      }
  }
  printf ("Fin du programme.\n");
  return 0;
}
Quel est le vrai problème que tu cherches à résoudre ?

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  frager50 le Jeu 29 Avr 2010 - 21:44

En fait je ne cherche pas spécialement a faire quelque chose, je fais juste des tests comme ça.

C'est exactement cela que je veux faire !

Est-il possible de copier un caractère dans le fichier puis de le lire et de le recopier et ainsi de suite.... ?

Code:
 début :

Jusqu'à la fin de a.exe :
    -lire caractère dans a.exe.
    -écrire ce caractère dans b.
    -lire ce caractère dans b.
    -l'écrire dans c.exe.

Fin.

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  -ed- le Jeu 29 Avr 2010 - 21:53

frager50 a écrit:En fait je ne cherche pas spécialement a faire quelque chose, je fais juste des tests comme ça.


C'est exactement cela que je veux faire !

Est-il possible de copier un caractère dans le fichier puis de le lire et de le recopier et ainsi de suite.... ?
Non. Enfin si, mais chaque lecture et chaque écriture provoque une avance. Si tu arrives à t'y retrouver, bravo. C'est en général le meilleur moyen de détruire ses données. On ne fait pas ce genre de manip dans la réalité.

Code:

 début :

Jusqu'à la fin de a.exe :
    -lire caractère dans a.exe.
    -écrire ce caractère dans b.
    -lire ce caractère dans b.
    -l'écrire dans c.exe.

Fin.
Je vois, mais ça n'a aucun intérêt.

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  frager50 le Jeu 29 Avr 2010 - 22:27

Je suis d'accord !

Bon je vais essayer je jouer avec le curseur !

Merci !

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Bidouillage de fichiers.

Message  Contenu sponsorisé Aujourd'hui à 21:18


Contenu sponsorisé


Revenir en haut Aller en bas

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

- Sujets similaires

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