Exécuter une library (.so) sous Linux

Exécuter une library (.so) sous Linux - C++ - Programmation

Marsh Posté le 24-09-2003 à 18:50:13    

Je cherche comment exécuter une librarie dynamique sous Linux (question très mal formulée, voir exemple :D). Je prends l'exemple de la libc. Si je tape "/lib/libc.so.6" dans mon shell, la librairie m'affiche des infos, comme son n° de version par exemple. Comment obtenir ce résultat ? Y a-t-il un point d'entrée particulier ?
 
Merci...

Reply

Marsh Posté le 24-09-2003 à 18:50:13   

Reply

Marsh Posté le 24-09-2003 à 20:04:43    

Euh... pour autant que je sache, ce genre de librairie est destinée à être liée avec un exécutable... Un peu comme une dll sous Windows quoi ! Tu n'irais pas exécuter une dll ! Pourquoi exécuter une lib linux alors ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-09-2003 à 20:55:45    

Harkonnen a écrit :

Euh... pour autant que je sache, ce genre de librairie est destinée à être liée avec un exécutable... Un peu comme une dll sous Windows quoi ! Tu n'irais pas exécuter une dll ! Pourquoi exécuter une lib linux alors ?


Le fait que ca semble possible, ce que j'ignorais, et que même si ça n'a aucun intérêt j'aimerais bien savoir comment c'est possible.
(ceci est un drapal)

Reply

Marsh Posté le 24-09-2003 à 21:53:30    

Harkonnen a écrit :

Euh... pour autant que je sache, ce genre de librairie est destinée à être liée avec un exécutable... Un peu comme une dll sous Windows quoi ! Tu n'irais pas exécuter une dll ! Pourquoi exécuter une lib linux alors ?


 
c bon, je sais ce que c qu'une librairie dynamique, mais le pb s'est posé aujourd'hui au taf. L'intérêt de la chose est par exemple de connaître la version d'une lib rien qu'en "l'exécutant", pas besoin d'un autre binaire avec lequel linker...
Et cela fonctionne, lancez la lib que je donne en exemple (libc.so.6 dans mon cas), il sort un petit descriptif, n° de version de la lib, n° de version du compilateur.... g retrouvé une partie de ce mécanisme dans les sources, mais g pas encore tout compris, je vais tenter ça ce soir chez moi pour voir... Mais si qqun connait bien ce mécanisme, merci de me l'expliquer (brièvement), ou de me donner un lien pouvant m'éclairer. Merci...


Message édité par biniou le 24-09-2003 à 21:55:40

---------------
LE topic à lire
Reply

Marsh Posté le 24-09-2003 à 23:00:35    

si vous avez pas compris le princip de bibliothèques,, z'etes pas sortie de l'affaire ...
 
d'un autre coté un pauvre programme de quelque ligne doit pouvoir faire ça ...
 
sinon string + grep  :D

Reply

Marsh Posté le 24-09-2003 à 23:03:37    

1 lien sur google : objdump

Reply

Marsh Posté le 24-09-2003 à 23:47:59    

Taz a écrit :

1 lien sur google : objdump


 
encore une fois, ce n'est pas ce que je demande. Si je voulais ce genre de truc, je ferais un binaire tout con qui link avec la lib en question.... mais là, je ne veux avoir à utiliser que la lib !!!
 
voilà l'exemple :
 

Code :
  1. [biniou@server biniou]$ /lib/libc.so.6
  2. GNU C Library stable release version 2.3.1, by Roland McGrath et al.
  3. Copyright (C) 2003 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.
  5. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  6. PARTICULAR PURPOSE.
  7. Compiled by GNU CC version 3.2.2 (Mandrake Linux 9.1 3.2.2-1mdk).
  8. Compiled on a Linux 2.4.21 system on 2003-02-17.
  9. Available extensions:
  10.         GNU libio by Per Bothner
  11.         crypt add-on version 2.1 by Michael Glad and others
  12.         linuxthreads-0.10 by Xavier Leroy
  13.         BIND-8.2.3-T5B
  14.         libthread_db work sponsored by Alpha Processor Inc
  15.         NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
  16. Report bugs using the `glibcbug' script to <bugs@gnu.org>.
  17. [biniou@server biniou]$


 
voilà, comme vous pouvez le voir, je ne tape que le nom de la librairie, et il m'affiche tout ce qui suit.... c tout ce que je veux.
 
PS : c bon, je connais un peu mon boulot quand même, je sais ce qu'est une lib. J'ai d'ailleurs moi même été surpris du résultat obtenu en lançant à tout hasard la lib...


Message édité par biniou le 24-09-2003 à 23:52:06

---------------
LE topic à lire
Reply

Marsh Posté le 24-09-2003 à 23:53:20    

on sait pas on te dit, et on te dit aussi que ça doit etre très simple de faire un script programme pour sortir tout ça

Reply

Marsh Posté le 24-09-2003 à 23:56:31    

readelf aussi

Reply

Marsh Posté le 25-09-2003 à 00:59:44    

Taz a écrit :

on sait pas on te dit, et on te dit aussi que ça doit etre très simple de faire un script programme pour sortir tout ça


 
je pense que tu n'as pas compris ce que j'attends, je ne veux pas insister, je veux juste que tu comprennes. Je ne veux rien écrire d'autre que ma librairie. Tu me donnes des liens vers objdump ou readelf, je ne veux pas avoir à utiliser d'outil externe à la librairie, sinon y a longtemps que ce serait fait (c même déjà fait depuis longtemps en fait). Je pense qu'il suffit d'implémenter un point d'entrée particulier dans cette librairie... Bon, ben je vais décortiquer les sources de la libc....


Message édité par biniou le 25-09-2003 à 01:00:59

---------------
LE topic à lire
Reply

Marsh Posté le 25-09-2003 à 00:59:44   

Reply

Marsh Posté le 25-09-2003 à 22:05:30    

je crois que la reponse on te la filer ! (je suppose)
un grep doit pouvoir faire l'affaire, surement que dans une bilbio tu dois pouvoir mette une en-tete
 
est-ce que ca marche avec toutes les biblio ? celles que toi tu as faites par exple ?


---------------
EurOPiUM, leader de WormsHL
Reply

Marsh Posté le 25-09-2003 à 23:50:17    

europium a écrit :

je crois que la reponse on te la filer ! (je suppose)
un grep doit pouvoir faire l'affaire, surement que dans une bilbio tu dois pouvoir mette une en-tete
 
est-ce que ca marche avec toutes les biblio ? celles que toi tu as faites par exple ?


 
1. Je ne veux pas utiliser d'outil externe (même pas grep)
2. Je cherche justement à implémenter un comportement que j'ai constaté, qui fonctionne sur certaines lib. Je n'ai pas eu le temps d'essayer au taf aujourd'hui, g juste constaté la présence d'un point d'entrée particulier nommé __init_main (d'ailleurs, le commentaire associé indiquait clairement que cette fonction faisait ce que j'attendais)... j'espère avoir le temps demain pour essayer ça (suis trop crevé pour essayer maintenant :D)


---------------
LE topic à lire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed