GCC / ELF - de onde vem o meu símbolo?
Pergunta
Há um executável que é dinamicamente ligado ao número de objetos compartilhados. Como posso determinar, à qual deles algum símbolo (importado para executável) pertence?
Se houver mais de uma possibilidade, eu poderia ld silmulate e ver de onde ele está sendo levado?
Solução
Tenha um olhar em nm (1) , objdump (1) e elfdump (1) .
Outras dicas
Assim como os mencionados Charlie " ldd " poder fazer algumas das coisas que você está procurando.
Se você pode ligar novamente o executável, a maneira mais simples para descobrir onde referências e definições vêm de está usando bandeira ld
-y
. Por exemplo:
$ cat t.c
int main() { printf("Hello\n"); return 0; }
$ gcc t.c -Wl,-yprintf
/lib/libc.so.6: definition of printf
Se você não pode vincular novamente o, ldd
executável então rodar nele, e 'nm -D'
em seguida, executado em todas as bibliotecas listadas em ordem, e grep
para o símbolo que você está interessado.
$LD_DEBUG=bindings my_program
Isso imprimir todas as ligações símbolo no console.