Question:
Comment afficher les appels de fonction externes dans le binaire ELF lié dynamiquement sous Linux?
will
2014-04-26 05:54:08 UTC
view on stackexchange narkive permalink

J'ai utilisé la commande file sous Linux pour obtenir des informations sur un fichier binaire. Je recherche également les adresses où se trouvent ces appels. Je pense que je peux obtenir ces informations de GDB ou objdump mais je ne suis pas encore très bon avec les commandes et programmes Linux, donc toute aide est très appréciée. Le résultat de la commande de fichier est ci-dessous:

  Exécutable ELF 32 bits LSB, Intel 80386, version 1 (SYSV), lié dynamiquement (utilise des bibliothèques partagées), pour GNU / Linux 2.6.24 , BuildID [sha1] = 0x6d232dd468b2344847a4b9c81eb064ffe257d5d0, dépouillé  

Ensuite, en utilisant la commande strings , j'ai obtenu cette sortie (je vois plusieurs appels de fonction C mais lesquels sont externes?):

  /lib/ld-linux.so.2-#mH4__gmon_start__libc.so.6_IO_stdin_usedexitstrncmpstrncpyputsprintfmallocatoi__libc_start_mainGLIBC_2.0PTRhQVh>UWest. pré>
Deux réponses:
broadway
2014-04-26 11:36:24 UTC
view on stackexchange narkive permalink

utilisez nm au lieu de chaînes. Les symboles non définis (indiqués par un U ) seront résolus en externe (par la libc ou autre), et T (ou t ) les symboles sont définis localement. Les minuscules indiquent un symbole local, les majuscules un symbole global.

Bien sûr, cela suppose qu'une table de symboles est présente. Dans votre exemple, il a été supprimé.

Dans ce cas, vous pouvez créer un fichier objdump -T pour lister les références externes.

yaspr
2014-04-27 04:08:54 UTC
view on stackexchange narkive permalink

La réponse à votre question est assez simple. Vous pouvez soit utiliser la commande nm avec le commutateur -D (ou --dynamic ), soit utiliser objdump avec le commutateur -T . Les deux commandes afficheront les entrées de la table de symboles dynamiques et les bibliothèques dont elles proviennent.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...