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 :

Commande nm et man elf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut Commande nm et man elf
    Bonjour

    Voila j'aimerasi faire un petit programme qui se raproche de la commande linux/unix NM.

    J'ai bien sur faire une recherche du le man nm et aussi elf.

    la commande nm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NU  nm  lists  the symbols from object files objfile....  If no object
           files are listed as arguments, nm assumes the file a.out.
    Donc si je comprend bien si je n'indique pas de parametre a la fonction nm il va me lire les information qui sont cotenue au "format ELF" dans le binaire a.out de base, la n'est pas le problem.

    Mon Petit soucis c'est que je ne vois pas comment utiliser les infos ELF.

    Avec un man elf, il m'indique gentillement l'include :p mais aussi tout une serie de structure qui peuvent me retourner beaucoup d'infomations.

    Mais disons que apres lecture et relecture je ne vois pas tellement comment remplire ces structure. je veux bien faire faire un open sur mon binaire il n 'y apas de soucis ^^

    mais apres quesque je fais de mon fd :/ man elf ne me dit rien de bon la decu :/

    encore si je pouvais ecrire quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elf(open("a.out", O_RDONLY));
    et que ca me retourne une superbe structure bien remplis avec toutes les infos qui vont bien je veux bien mais il ne faut pas rever non plus :p

    Donc si vous pouvez juste me guider sur la bonne voix ^^

    je vous remerci par avance :p

    si je me suis mal exprimer je suis desoler mais je ne vois pas comment formuler ma question. :/

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PiXi-PiX Voir le message
    Mon Petit soucis c'est que je ne vois pas comment utiliser les infos ELF.
    Pour une description du format d'un fichier elf :

    http://www.wotsit.org
    • Faire une lecture binaire dans un tableau de unsigned char (fread()).
    • Définir la ou les structures qui vont bien
    • Recopier les données situées dans le bloc lu, dans la structure, selon les indications de format spécifiées dans la doc...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Merci je vais jeter un oeil je te tiends au courant de mon avancement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Je suis desoler mais j'ai beau cherche avec la fonction fread, je ne vois pas bien comment remplir les structure 'elf' :/

    j'utilise bien fopen qui me renvois un FILE *. je le donne en paramettre a fread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char *bite;
     
    fd = fopen(name, "r");
    fread(&bite, sizeof(unsigned char), 2, fd));
    en ce qui concerne le 2 pour l'avant derniere parametre c'est du hasard car je ne sais pas de combien je dois lire :/

    la fonction fread me renvois bien 2, mais bite ne contien rien du tout :/

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PiXi-PiX Voir le message
    Je suis desoler mais j'ai beau cherche avec la fonction fread, je ne vois pas bien comment remplir les structure 'elf' :/

    j'utilise bien fopen qui me renvois un FILE *. je le donne en paramettre a fread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned char *bite;
     
    fd = fopen(name, "r");
    fread(&bite, sizeof(unsigned char), 2, fd));
    en ce qui concerne le 2 pour l'avant derniere parametre c'est du hasard car je ne sais pas de combien je dois lire :/

    la fonction fread me renvois bien 2, mais bite ne contien rien du tout :/
    La taille dépend la spécification du format ELF. Tu l'as lue ?

    Toutes les indications sont dans la description du format...

    fread() attend l'adresse du premier élément d'un tableau de char . Tu penses vraiment que
    est un tableau de char ?

    (Et évite de parler de 'bite' sur un forum public, ça pourrait choquer... )

    Mettons qu'il faille lire 128 octets dans le fichier. OPn créée un tableau de 128 bytes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char data[128];
    et on demande la lecture de ces 128 bytes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int n = fread (data, sizeof data, 1, fd);
    n doit valoir 1. (Lire la doc de fread()).

    Ensuite, on utilise les données de data pour remplir la structure. Evidemment, il faut savoir lire et interpréter la spécification du format elf, mais ça c'est pas du C, c'est de l'analyse...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Desoler pour les thermes utilise :/

    Ensuite oui pour lire le tableau, je ne peux pas lui donner une valeur en dur :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unsigned char data[128];
    si j'ai besoin de plus tu pensses que c'est possible de connaitre la taille a allouer pour eviter de faire un tableau soit trop petit soit trop gros ?

Discussions similaires

  1. Problème avec la commande man
    Par chadijaber dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/03/2009, 09h49
  2. Réponses: 2
    Dernier message: 18/02/2009, 12h25
  3. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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