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

C Discussion :

Ecrire un fichier binaire avec des caractères


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 31
    Points
    31
    Par défaut Ecrire un fichier binaire avec des caractères
    Bonsoir,

    En C on peut faire un prog qui crée un fichier et qui écrit dedans avec la fonction fprintf. Je me demande s'il est possible d'écrire un prog qui crée un fichier .exe, autrement dit de "taper" une chaine de caractères "chaine" telle qu'avec la commande fprintf(fichier, "chaine") on écrirait un fichier .exe.

    Je ne sais pas si je suis clair...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 31
    Points
    31
    Par défaut
    J'espère être plus clair, je me demande s'il est possible de taper au clavier une chaîne de caractères "bidule" telle que en compilant ce prog :

    int main(int argc, char *argv[])
    {
    FILE *lefichier=NULL;

    lefichier=fopen("lefichierexe.exe", "wb");

    fprintf(lefichier, "bidule");

    fclose(lefichier);

    system("PAUSE");
    return 0;
    }
    on obtiendrait le fichier lefichierexe.exe, qui serait "un vrai" fichier .exe ?

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par stokastik
    on obtiendrait le fichier lefichierexe.exe, qui serait "un vrai" fichier .exe ?
    Si tu sais quoi y mettre, bien sûr ! Mais dans la phrase précédente, savoir quoi mettre n'est pas généralement une chose facile...

    Jc

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par fearyourself
    Si tu sais quoi y mettre, bien sûr ! Mais dans la phrase précédente, savoir quoi mettre n'est pas généralement une chose facile...

    Jc
    Cela risque quand même d'être difficile avec fprintf() en sachant qu'un ".exe" (sous Windows [1], donc) contiendra au moins un octet à 0 (au moins un '\0')... Mais si tu sais faire, juste avec un `fprintf(lefichier, "bidule");', je veux bien voir

    @stokastik : essaye plutôt avec "fwrite()".



    [1] - ou ReactOS
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par David.Schris
    Cela risque quand même d'être difficile avec fprintf() en sachant qu'un ".exe" (sous Windows [1], donc) contiendra au moins un octet à 0 (au moins un '\0')... Mais si tu sais faire, juste avec un `fprintf(lefichier, "bidule");', je veux bien voir

    @stokastik : essaye plutôt avec "fwrite()".



    [1] - ou ReactOS
    Le bourrin en moi dira que c'est possible avec fprintf en faisant un %s et une chaîne de caractères qui sera bien initialisée.

    Par contre, fwrite est plus adapté, je te l'accorde

    Jc

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par fearyourself
    Le bourrin en moi dira que c'est possible avec fprintf en faisant un %s et une chaîne de caractères qui sera bien initialisée.

    Par contre, fwrite est plus adapté, je te l'accorde

    Jc
    Bonjour,

    Je suppose que tu penses à un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(lefichier,"%s","MZblabla\0blibli\0\x90\x90\x90\x90");
    ?? [1]

    Cordialement,
    DS.

    [1] - Je ne dirai rien concernant le fait que ce n'est pas de la forme `fprintf(lefichier, "bidule");'...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    À mon avis, le fprintf() s'arrêtera au premier \0...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par David.Schris
    Bonjour,

    Je suppose que tu penses à un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(lefichier,"%s","MZblabla\0blibli\0\x90\x90\x90\x90");
    ?? [1]

    Cordialement,
    DS.

    [1] - Je ne dirai rien concernant le fait que ce n'est pas de la forme `fprintf(lefichier, "bidule");'...
    Je pensais plutôt une boucle et un fprintf au milieu puisque :
    Citation Envoyé par Médinoc
    À mon avis, le fprintf() s'arrêtera au premier \0...
    Jc

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par fearyourself
    Je pensais plutôt une boucle et un fprintf au milieu puisque :
    Citation Envoyé par Médinoc
    À mon avis, le fprintf() s'arrêtera au premier \0...
    Jc
    Alors nous sommes d'accord
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  10. #10
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par stokastik
    on obtiendrait le fichier lefichierexe.exe, qui serait "un vrai" fichier .exe ?
    Les compilateurs sont la pour ça !!!
    Faire un fichier .exe est particulièrement difficile...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 31
    Points
    31
    Par défaut
    Eh bien mon topic a plus de succès que ce que je ne pensais

    Dans ma chaîne "bidule", je ne pourrais pas coller le contenu d'un fichier .exe à quelques modifications près ? C'est bien plus compliqué que ça ?

    (ToTo13, bien sûr on pourrait croire que ça ne sert à rien de créer un fichier .exe que j'ai déjà, mais ce prog permettrait de créer ce fichier chez quelqu'un d'autre)

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par stokastik
    Dans ma chaîne "bidule", je ne pourrais pas coller le contenu d'un fichier .exe à quelques modifications près ? C'est bien plus compliqué que ça ?
    Faire des "modifications près" directement dans le code machine, ce n'est pas aisée, voir "presque impossible" si tu ne veux pas changer juste une chaine de texte mais des instructions machines.

    Pour s'entrainer avant d'entamer l'assembleur, on avait bosser en codant directement en langage machine, mais il faut le manuel du processeur concernant toutes les intructions (et les équivalences en binaire), au bout de 3 instructions écrites, tu laisses tomber en général...
    Je ne répondrai à aucune question technique en privé

  13. #13
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par stokastik
    ce prog permettrait de créer ce fichier chez quelqu'un d'autre
    Allons bon.

  14. #14
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par stokastik
    (ToTo13, bien sûr on pourrait croire que ça ne sert à rien de créer un fichier .exe que j'ai déjà, mais ce prog permettrait de créer ce fichier chez quelqu'un d'autre)
    Quel intérêt ?
    Au pire, crée un script plutôt, beaucoup plus facile à gérer et à maintenir. Mais quoi qu'il arrive, je ne vois pas bien l'intérêt... tu as une idée précise à nous proposer ?
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par DaZumba
    Citation Envoyé par stokastik
    ce prog permettrait de créer ce fichier chez quelqu'un d'autre
    Allons bon.
    Ah... Tu penses à la même chose que moi ?
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 31
    Points
    31
    Par défaut
    Je débute en C, quand je me pose une question j'essaye de comprendre c'est tout. Quand j'ai découvert qu'on pouvait créer un fichier texte en C je me suis demandé si on pouvait faire un .exe voilà. Maintenant la seule chose que je pourrais en faire c'est envoyer ça à un copain pour lui dire "eh regarde ce que j'ai appris à faire".

    millie je crois que tu ne m'as pas bien compris. J'ai essayé de coller le contenu d'un fichier .exe ouvert avec un éditeur de texte et de copier cela dans ma chaîne "bidule", en sorte que le fichier C réécrive le fichier .exe. Je n'ai pas réussi et je me demandais s'il est possible de faire cela.

  17. #17
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Il est possible d'écrire un fichier dans n'importe quel format. La meilleure preuve en est que ces fichiers ont bien été créés par quelque chose.

    Ton linker, par exemple, crée des fichiers .exe, Word crée des fichiers .doc, etc.
    Après, cela suppose que tu comprennes le format, et que tu l'utilises de manière adéquate. Tu peux recréer un linker, si ça te botte (et si tu as beaucoup, beaucoup de temps devant toi.)
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par stokastik
    [...] J'ai essayé de coller le contenu d'un fichier .exe ouvert avec un éditeur de texte et de copier cela dans ma chaîne "bidule", en sorte que le fichier C réécrive le fichier .exe. Je n'ai pas réussi et je me demandais s'il est possible de faire cela.
    Pas comme cela (pas en faisant un copier/coller depuis un éditeur de texte).
    Il y a des caractères qui vont "poser problème" et il te faudra les représenter en utilisant une séquence d'échapement. Par exemple, pour un octet égal à 9 tu pourras par exemple avoir "\x09" ou "\t" dans ta chaîne. Dans ce cas on doit "l'encoder" car il s'agit d'une tabulation et tu devras faire la même chose pour les autres caractères non-imprimables et plus généralement ceux dont le code ASCII est strictement inférieur à 32 et, pour être tranquille, ceux dont le code ASCII est strictement supérieur à 127.
    Faire cela à la main peut vite de venir fastidieux, donc tu pourrais...créer un programme qui lit un ".exe" en mode binaire et qui affiche une chaîne de caractères utilisable dans un programme en C en encodant les caractères qui doivent l'être... fopen() pour ouvrir le fichier à convertir, fgetc() pour le lire caractère par caractère, un "if" pour tester le code ASCII du caractère et savoir si il doit être encodé, fputc() pour écrire un caractère non encodé, fprintf() (ou printf()) pour écrire un caractère en hexadécimal, fclose() pour fermer le fichier...et voilà
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 31
    Points
    31
    Par défaut
    Excellent David.Schris tu m'as compris et tu as répondu impec

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

Discussions similaires

  1. [AC-2010] Comment lire (ReadLine) un fichier XML avec des caractères accentués
    Par JFDAccess dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/01/2015, 07h37
  2. Ecrire un fichier binaire avec AS3
    Par f56bre dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 16/12/2008, 19h49
  3. Ecrire un fichier .txt avec des retours chariot
    Par french-petzouille dans le forum Langage
    Réponses: 9
    Dernier message: 30/03/2007, 20h01
  4. ecrire un label avec des caractères unicode
    Par jamescook dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/02/2007, 10h18
  5. Fichier de langue avec des caractères chinois
    Par marcootz dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2007, 18h54

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