• # Bin c'est bien simple...

    Posté par  (site web personnel) . Évalué à 3.

    Un fichier .so n'est pas une archive. Il ne contient pas d'autre fichiers. C'est un objet partagé (Shared Object), d'où son nom. On appelle cela aussi une bibliothèque partagée. Elle contient juste les points d'entrée vers les symboles (fonctions, variables) définies dans la bibliothèque comme étant accessibles de l'extérieur.

    Pour t'en convaincre, utilise la commande file.


    [luis@donald .libs]$ file -i libgmcontacts.a
    libgmcontacts.a: application/x-archive
    [luis@donald .libs]$ file -i /lib/libpopt.so.0.0.0
    /lib/libpopt.so.0.0.0: application/x-sharedlib, stripped


    La commande nm peut te donner des infomations sur un objet les symboles définis à l'intérieur, du moment qu'ils n'ont pas été retirés avec strip. Après il existe peut être un commande ou un programme pour connaitre les points d'entrée d'un .so, mais je ne la connais pas. Et si rien ne marche, il reste la commande strings qui permet d'afficher les chaines de caractères contenues dans le fichier, et permet de retrouver des symboles (parmi bien d'autres choses).
    • [^] # Re: Bin c'est bien simple...

      Posté par  . Évalué à 2.

      Question stupide (débutant quasi intégral, là...) : quel est l'intérêt de stripper ses bibliothèques partagées, et surtout comment le compilateur fait-il pour retrouver les noms de symboles quand on les utilise ? avec les headers, ok, mais comment alors sait-il les retrouver dans la bibliothèque partagée ?

      Merci !
    • [^] # Re: Bin c'est bien simple...

      Posté par  . Évalué à 3.

      Vu que un .so est un fichier ELF standard les commandes permettant de les afficher/manipuler sont disponible :objdump, readelf, elfsh, ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.