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 :

Linux Lecture de ELF


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 21
    Par défaut Linux Lecture de ELF
    Bonjour,

    Pour les librairies dynamiques (*.so) Comment avoir l'adresse absolue en memoire des symboles ? J'arrive a recuperer les noms mais pour l'adresse je ne sais pas comment faire.
    Est-ce que c'est possible en lisant avec les structures fournies par Elf ?

    Merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    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 461
    Par défaut
    • Si c'est depuis la ligne de commande, tu peux essayer « nm -D NomDeTaBibliothèque » ;
    • Si c'est un chargement au runtime avec dlopen(), if faut utiliser dlsym() ;
    • Sinon, si c'est une bibliothèque partagée dynamiquement (une *.so ordinaire) mais liée à la compilation, comme dans la majorité des cas, il suffit d'utiliser le symbole en C préfixé par « & », voire même pas préfixé du tout s'il s'agit d'une fonction.


    Si tu es dans le troisième cas mais que le nom du symbole n'est pas connu à l'avance, il faut se rabattre sur le deuxième cas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 21
    Par défaut
    Bonjour,

    nan en fait je me suis mal exprime. Je souhaiterais effectuer un traceur de fonctions (a l'aide de ptrace).

    Pour le moment ce que j'ai réussi a faire :
    - je prend un binaire au format elf, je le map en mémoire
    - Direction Section header puis .symtab et .dynsim .
    J'y prend les symboles: uniquement les fonctions et celle qui ont leur adresse (Elfx_Sym.st_value) supérieure a zero.
    - Direction header Program, Dynamic Section
    - Je regarde ceux qui ont la valeur DT_NEEDED (qui sont des lib.so donc).
    - Je refais le même cheminement avec les DT_NEEDED, le tout recursif.

    Le problème est que lorsque je parse les libs.so, les adresses de symboles ne sont pas absolues mais relatives au fichier.
    J'aimerais bien trouver les adresses absolues de ses symboles.

    Donc j'avais pense que si je trouvais l'adresse d'où réside actuellement la librairie, il me suffirait d'additionner :
    l'adresse absolu de la lib + l'adresse relative du symbole = adresse absolu du symbole en mémoire.
    Mais bon je ne pense pas que cette méthode soit valide.

    Comment dois-je faire ?

    Une autre question , j'ai vu dans quelques sources sur internet que le binaire principal était charge a l'adresse 0x8048000. Est-ce valide pour 32 et 64 bits? Je n'ai trouve aucun define dans les /usr/include. Ou bien est-il définit dans le format elf?

    Merci .

    PS : désole pour les accents je suis sur un clavier qwerty.

Discussions similaires

  1. Java Linux Lecture fichier
    Par domino313131 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 30/12/2010, 00h58
  2. [Lazarus] [Linux] Lecture périphérique USB HID
    Par caku dans le forum Lazarus
    Réponses: 6
    Dernier message: 21/10/2010, 17h21
  3. linux: lecture d'une image bmp
    Par asoka13 dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/03/2008, 10h30
  4. Réponses: 11
    Dernier message: 05/07/2006, 16h55
  5. [Linux] Lecture fichier
    Par cali1983 dans le forum C
    Réponses: 7
    Dernier message: 21/06/2006, 09h40

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