Considere a seguinte saída truncada da execução objdump -T
(Imprime entradas da tabela de símbolos dinâmicos) no ls
utilitário GNU.
/usr/bin/ls: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.3) __ctype_toupper_loc
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) getenv
0000000000000000 DO *UND* 0000000000000000 (GLIBC_2.2.5) __progname
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) sigprocmask
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.3.4) __snprintf_chk
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) raise
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.34) __libc_start_main
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) abort
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) __errno_location
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) strncmp
0000000000000000 w D *UND* 0000000000000000 Base _ITM_deregisterTMCloneTable
O que Base
significa na última linha 6ª coluna? Por exemplo, é aparente que (GLIBC_2.2.5)
é a glibc
versão para strncmp
função. No entanto, em quais bibliotecas externas as Base
funções são definidas? Quaisquer dicas para entender isso seriam úteis.
Base
significa que não há versão associada ao símbolo, ou seja , as bibliotecas que fornecem os símbolos não fornecem várias versões (ou no caso de símbolos emls
si,ls
contém uma única versão). As bibliotecas usadas porls
podem ser vistas usandoldd /bin/ls
.Consulte O que as várias versões GLIBC significam na saída do ldd? para detalhes.