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

Bibliothèques, systèmes et outils C Discussion :

Symbole et section ELF


Sujet :

Bibliothèques, systèmes et outils C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut Symbole et section ELF
    Salutation,
    Après de nombreuse recherche dans les man et internet je ne trouve pas comment récupéré la table des symbole ni de recuperer le Elf64_Sym * ni comment accéder au contenue des section comme le fait le objdump -s .. donc si quelqu'un pourrais m'aider cela serais cool merci a vous.

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 876
    Par défaut
    Je presume que tu fais le nm-objdump a epitech ? Si oui, un cours te montre comment obtenir la table des symboles. Dans tous les cas n'oublie JAMAIS de verifier que tes pointeurs ne depassent pas dans ce projet ! Ca t'evitera un segfault inutile lors de ta soutenance.

  3. #3
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut
    tu presume bien et mon cours me montre comment recuperer la table des section et non celle des symbole tout mes question ne sont pas dans mon cours justement.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 498
    Billets dans le blog
    1
    Par défaut
    Ce ne serait pas plutôt readelf -s ou objdump -t ?

  5. #5
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut
    merci a toi mais c'est objdump -s et nm que j'essai de reproduire et tout ce qui concerne la Elf64_Sym concerne le nm et la recuperation du contenu des section est pour le objdump -s
    Et malheureusement ton lien ne m'avance pas vraiment

  6. #6
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Citation Envoyé par sourcilpower Voir le message
    Salutation,
    Après de nombreuse recherche dans les man et internet je ne trouve pas comment récupéré la table des symbole ni de recuperer le Elf64_Sym * ni comment accéder au contenue des section comme le fait le objdump -s .. donc si quelqu'un pourrais m'aider cela serais cool merci a vous.
    Salut,

    La table des symboles est accessibles dans les sections .dynsym et .symtab. Ces sections sont identifiables par le sh_type (SHT_DYNSYM et SHT_SYMTAB) dans le section header (Elf32_Shdr).
    Pour identifier le nom du symbol, le champ st_name de Elf32_sym contient un index dans la table des strings (sh_type = SHT_STRTAB).

    Je ne sais plus comment le nombre d'entree est trouve (ou s'il y a un champ contenant le nombre d'element), mais je pense qu'en iterant de sh_offset a sh_offset + sh_size par pas de sizeof(Elf32_Sym), tu devrait retrouver tes petits.

  7. #7
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dahtah Voir le message
    Salut,

    La table des symboles est accessibles dans les sections .dynsym et .symtab. Ces sections sont identifiables par le sh_type (SHT_DYNSYM et SHT_SYMTAB) dans le section header (Elf32_Shdr).
    Pour identifier le nom du symbol, le champ st_name de Elf32_sym contient un index dans la table des strings (sh_type = SHT_STRTAB).

    Je ne sais plus comment le nombre d'entree est trouve (ou s'il y a un champ contenant le nombre d'element), mais je pense qu'en iterant de sh_offset a sh_offset + sh_size par pas de sizeof(Elf32_Sym), tu devrait retrouver tes petits.
    Merci pour cette reponse mais je me pose toujours la question sur le faite que ou se trouve la Elf64_Sym car je sais que la Elf64_Ehdr *= au retour de mmap . et le Elf64_Shdr * = retour mmap + elf->e_shoff .. et donc qu'elle sera le commencement du Elf64_Sym* = ?
    SVP

  8. #8
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Citation Envoyé par sourcilpower Voir le message
    Merci pour cette reponse mais je me pose toujours la question sur le faite que ou se trouve la Elf64_Sym car je sais que la Elf64_Ehdr *= au retour de mmap . et le Elf64_Shdr * = retour mmap + elf->e_shoff .. et donc qu'elle sera le commencement du Elf64_Sym* = ?
    SVP
    Meme principe que ce que j'ai dit au dessus. Tu as une table des sections commencant a elf->e_shoff de elf->e_shnum elements de taille elf->e_shentsize (sans doute egal a sizeof(Elf64_Shdr)). Une boucle for, un cast (Elf64_Shdr) et un if (sh_type == SHT_SYMTAB) te permettent de trouver &Elf64_Sym (dans le champ sh_addr de Elf64_Shdr).

  9. #9
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut
    Merci cela m'avance beaucoup encore une derniere question.

    - Pour caster la string table de Elf64_Shdr j'ai fait comme ceci = (retour mmap + shdr[elf->e_shstrndx].sh_offset) mais pour la string table des symbole comment faire ?

    -Comment recupere le contenu de chaque section en text ou en hexa comme le fait la commande objdump -s ?

    SVP

  10. #10
    Membre très actif
    Avatar de sourcilpower
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 128
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dahtah Voir le message
    Meme principe que ce que j'ai dit au dessus. Tu as une table des sections commencant a elf->e_shoff de elf->e_shnum elements de taille elf->e_shentsize (sans doute egal a sizeof(Elf64_Shdr)). Une boucle for, un cast (Elf64_Shdr) et un if (sh_type == SHT_SYMTAB) te permettent de trouver &Elf64_Sym (dans le champ sh_addr de Elf64_Shdr).
    en faisant ce que tu as fait j'ai remarquer un truc etrange. C'est a dire que la valeur sh_addr de la symtab est egale a celle de la strtab de la shdr
    voici comment je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    buf = mmap(NULL, lseek(fd, 0, SEEK_END), PROT_READ, MAP_PRIVATE, fd, 0);
    elf = (Elf64_Ehdr *)buf;
    shdr = (Elf64_Shdr *)(buf + elf->e_shoff);
    strtab = (char *)(buf + shdr[elf->e_shstrndx].sh_offset);
     
      i = -1;
      while (i < elf->e_shnum)
        if (shdr[++i].sh_type == SHT_SYMTAB)
          return (&strtab[shdr[i].sh_addr]);

  11. #11
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Citation Envoyé par sourcilpower Voir le message
    - Pour caster la string table de Elf64_Shdr j'ai fait comme ceci = (retour mmap + shdr[elf->e_shstrndx].sh_offset) mais pour la string table des symbole comment faire ?
    Pour la table des symboles, tu cherches la Shdr ayant un type SHT_STRTAB (la string tab des sections a un type different: SHT_SHSTRTAB). Le champ sh_addr pointe vers le debut de la string table. Ensuite, chaque symbole (sh_name) reference sh_addr + index.

    La string table a un format un peu comme ca:
    abcd\0efgh\0ijklmno\0 ou sh_name est un index dans la chaine. par exemple l'index 5 pointe vers la string efgh\0

    Citation Envoyé par sourcilpower Voir le message
    -Comment recupere le contenu de chaque section en text ou en hexa comme le fait la commande objdump -s ?
    Bah, tu dump le contenu de sh_addr a sh_addr + sh_size pour chaque Elf64_Shdr

    Citation Envoyé par sourcilpower Voir le message
    en faisant ce que tu as fait j'ai remarquer un truc etrange. C'est a dire que la valeur sh_addr de la symtab est egale a celle de la strtab de la shdr
    Pas trop le temps de regarder en detail. Desole.

Discussions similaires

  1. Lister les symboles d'un fichier Elf.
    Par Jazz_ dans le forum C
    Réponses: 4
    Dernier message: 13/03/2011, 04h27
  2. Réponses: 7
    Dernier message: 30/05/2008, 04h42
  3. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 02h27
  4. [Sybase] Définition des symboles
    Par SoaB dans le forum Sybase
    Réponses: 5
    Dernier message: 20/03/2003, 00h06
  5. symbole ##
    Par JEG dans le forum C
    Réponses: 2
    Dernier message: 23/01/2003, 20h15

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