考虑以下在 GNU实用程序上运行objdump -T
(打印动态符号表条目)的截断输出。ls
/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
Base
最后一行第六列是什么意思?例如,显然(GLIBC_2.2.5)
是功能glibc
版本strncmp
。但是,在哪些外部库中Base
定义了函数?理解这一点的任何指示都会有所帮助。
Base
意味着没有与符号关联的版本,即提供符号的库不提供多个版本(或者在符号ls
本身的情况下,ls
包含单个版本)。所使用的库ls
可以使用ldd /bin/ls
.请参阅多个 GLIBC 版本在 ldd 的输出中意味着什么?了解详情。