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

  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 ?

  7. #7
    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
    Donc voila ou j'en suis grace a toi je pensses que cela devrais fonctioner :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     unsigned char data[128];
      FILE	*fd;
      int	n;
     
      fd = fopen(name, "r");
      n = fread(&data,sizeof data , 1, fd);
      printf("%s %d\n", data, n);
    voila le retour

    $ELF 1


    je sais fopen considere la fin du fichier comme une erreur ou quelques chose comme cela il y a une fonction appeler pour verifier ca

    bon je me lance dans la recupere des valeurs de data

    merci beaucoup

  8. #8
    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
    Desoler pour les thermes utilise :/
    termes...
    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 ?
    J'ai donné un exemple simpliste. En réalité il y a probablement une information dans les données lues qui permet de calculer la taille nécessaire et on fait alors une alocation qui va bien avec malloc().

    Sinon, on utilise des techniques souples comme malloc()/realloc() ou les listes chainées, qui permettent de s'adapter au fur et à mesure de la lecture...

    Mais dans tous les cas, les adresses doivent être valides, sinon, le comportement est indéterminé.

  9. #9
    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
    au risque de passer pour un boulet je ne vois pas comment utilise les structure donner par le man elf, enfin je ne vois pas comment les remplir a partir de mon unsigned char data :/

    les 3 premier char dans data m'indique bien ELF le reste n'est pas lisite si ont affiche un char apres l'autre ce qui est normale.

    mais je ne vois pas comment parcer data :/ une piste ?

  10. #10
    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
    au risque de passer pour un boulet je ne vois pas comment utilise les structure donner par le man elf, enfin je ne vois pas comment les remplir a partir de mon unsigned char data :/

    les 3 premier char dans data m'indique bien ELF le reste n'est pas lisite si ont affiche un char apres l'autre ce qui est normale.

    mais je ne vois pas comment parcer data :/ une piste ?
    Le problème c'est que le vrai travail de l'informaticien, c'est ça. Alors il faut apprendre à le faire, Ca commence par une lecture de la doc et la compréhension de son contenu. Tu l'as lue ? Qu'est-ce que tu ne comprends pas ? Chaque champ doit être décrit avec une taille, un type et une sémantique (signification). Alors, tu en es où ? Je ne connais pas plus le format ELF que toi, mais l'informatique, c'est ça. Savoir s'adapter rapidement à une situation nouvelle...

  11. #11
    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 tout à fait d'accord avec toi en ce qui concerne le fait de s'adapter rapidement.

    Mais disons que pour avoir lu et relu le man elf, il y a pas mal d'infos, même énormément. mais je ne vois pas du tout comment remplir les structure données dans le man avec un simple unsigned char, je sais aussi que elf marche par "tranche" si je peux me permettre l'expression.

    Il faut aussi savoir sur quel architecture ont est, en l'occurrence je vais utiliser mon petit programme que sur 32-bit, donc je vois à peu prêt où me repérer question structure.

    Je cherche toujours un moyens de lire les infos dans le unsigned char *data.
    si je sais comment remplir une des structure elf je te dis ça le plus rapidement possible.

    mais si je comprend bien une fois les structures remplies il ne me reste plus qu'à lire les informations qui m'intéressent.

  12. #12
    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 tout à fait d'accord avec toi en ce qui concerne le fait de s'adapter rapidement.

    Mais disons que pour avoir lu et relu le man elf, il y a pas mal d'infos, même énormément. mais je ne vois pas du tout comment remplir les structure données dans le man avec un simple unsigned char, je sais aussi que elf marche par "tranche" si je peux me permettre l'expression.

    Il faut aussi savoir sur quel architecture ont est, en l'occurrence je vais utiliser mon petit programme que sur 32-bit, donc je vois à peu prêt où me repérer question structure.

    Je cherche toujours un moyens de lire les infos dans le unsigned char *data.
    si je sais comment remplir une des structure elf je te dis ça le plus rapidement possible.

    mais si je comprend bien une fois les structures remplies il ne me reste plus qu'à lire les informations qui m'intéressent.
    Pour copier les données dans la structure, soit memcpy() si les données sont 'brutes', soit byte par byte avec les conversions qui vont bien si nécessaire (endianess, par exemple).

  13. #13
    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 regarderais ca de plus prets quand je serais sur mon station de travaille

    je te remerci je te tiens au courant dans la semaine

    merci beaucoup

    je vois pas encore trop comment utiliser memcpy() pour remplire une strcuture avec un char *data mais je vais me torture les meninges

  14. #14
    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
    Apres avoir chercher et tester pas mal de choses je crois que je suis sur la mauvaise poste avec le char *data...

    et y a plusieurs structures imbriquees pour recupere mes donnees, je lutte un choya pour me deplaer de dans et je ne suis meme pas sur qu'elle soit bien remplis ^^

    Bon je crois que je vais mettre ce projet de coter il doit me manques des notions importantes quelques parts je verais plus tard.

    merci beaucoup pour l'aide en tout cas

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