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 opcode dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut Ecrire un opcode dans un fichier
    Bonjour,

    J'aimerais écrire un opcode dans un fichier (par exemple "\x90" = nop ).
    J'utilise donc une fichier binaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *FP = fopen("toto","wb");
    Quand je fais :
    Ca marche parfaitement, mon fichier contient bien l'octet 0x90.

    Je veux maintenant faire la meme chose en passant par les arguments de la ligne de commande, mais ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(argv[1],1,sizeof(argv[1]),FP);
    En faisant :
    ./monprog "\x90"
    Ca me donne la chaine "\x90" dans le fichier, et non pas comme précedemment l'octet 0x90.

    Quelqu'un peut m'expliquer pourquoi ça ne fait pas la même chose et comment remédier ce problème ?
    Merci

    Sorry

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Les séquences d'échappement sont parsées à la compilation, pas à l'exécution.

    Vu du programme, ta chaîne "\x90" ne fait qu'un seul caractère, pas quatre.
    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.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    En outre, ceci ne marchera pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(argv[1],1,sizeof(argv[1]),FP);
    sizeof est un mot-clé réservé du C, pas une fonction. Il est utilisé à la compilation également. En l'occurence, il renverra invariablement la taille du pointeur argv[1], soit 4 octets sur une machine 32 bits.

  4. #4
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    Ok donc là aussi, je vais devoir ruser autrement...

    Merci

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par sorry60 Voir le message
    Ok donc là aussi, je vais devoir ruser autrement...

    Merci
    Pas forcément : dans ce dernier cas, la fonction que tu cherches s'appelle strlen().

    Pour obtenir la valeur numérique d'un nombre écrit dans une chaîne de caractères (comme l'argument que tu exhibes), regarde du côté de strtol(). Regarde aussi ce qui se passe lorsque tu mets la base à zéro ...

  6. #6
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    J'ai trouvé plus simple :

    ./monprog `printf '\x90\x90\x90'`
    Et ensuite avec argv[1] j'obtiens bien ce qu'il faut !

    Merci
    Sorry

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

Discussions similaires

  1. ecrire une chaine dans un fichier [prob]
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 31/05/2006, 02h20
  2. Ecrire une variable dans un fichier
    Par slam dans le forum Général Python
    Réponses: 2
    Dernier message: 14/04/2006, 18h58
  3. Ecrire 4 lignes dans un fichier texte
    Par kikica dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2006, 16h04
  4. Ecrire un objet dans un fichier
    Par mikebranque dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2006, 13h39
  5. Ecrire et lire dans un fichier texte
    Par podz dans le forum C
    Réponses: 3
    Dernier message: 25/10/2005, 16h57

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