2008-12-01 8 views
4

Il existe un exécutable lié dynamiquement au nombre d'objets partagés. Comment puis-je déterminer à quel symbole appartient le symbole (importé dans l'exécutable)?GCC/ELF - d'où vient mon symbole?

S'il y a plus d'une possibilité, pourrais-je silmuler ld et voir d'où elle est prise?

+0

Voir cette question: http://stackoverflow.com/questions/290799/how-can-i-find-out-which-library-is-home-to-a-given-object. –

Répondre

5

En plus de ceux mentionnés par Charlie, "ldd" pourrait faire partie de ce que vous cherchez.

3

Si vous pouvez relier l'exécutable, la manière la plus simple de savoir d'où proviennent les références et les définitions est d'utiliser le flag ld-y. Par exemple:.

$ cat t.c 
int main() { printf("Hello\n"); return 0; } 

$ gcc t.c -Wl,-yprintf 
/lib/libc.so.6: definition of printf 

Si vous ne pouvez pas réassocier l'exécutable, puis exécutez ldd sur elle, puis exécutez 'nm -D' sur toutes les bibliothèques énumérées dans l'ordre, et grep pour le symbole que vous êtes intéressé par

1
$LD_DEBUG=bindings my_program 

Cela imprimerait toutes les liaisons de symboles sur la console.