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