为什么 objdump -T 中相同版本字符串的某些实例包含在括号中?

Har*_*rsh 3 linux elf binary

查看运行objdump -Ton生成的以下输出片段libc.so.6

000000000009f8a0 g    DF .text  000000000000001d (GLIBC_2.2.5) aio_write64
0000000000119d00 g    DF .text  0000000000000034  GLIBC_PRIVATE __pread64_nocancel
000000000009aae0 g    DF .text  00000000000003c0  GLIBC_2.34  pthread_rwlock_timedwrlock
0000000000133db0 g    DF .text  0000000000000354  GLIBC_2.2.5 __backtrace_symbols
00000000001184f0  w   DF .text  00000000000006c2  GLIBC_2.23  fts64_read
000000000009aae0 g    DF .text  00000000000003c0 (GLIBC_2.2.5) pthread_rwlock_timedwrlock
Run Code Online (Sandbox Code Playgroud)

输出的第 1 行和第 4 行具有相同的GLIBC版本字符串,但其中一个包含在括号中,而另一行则没有。我在objdump许多其他elf二进制文件的输出中观察到了这种差异。(GLIBC_2.2.5)GLIBC_2.2.5输出之间有什么细微的区别吗objdump

Ste*_*itt 5

请参阅该选项的说明-T

\n
\n

如果版本是解析对符号的未版本化引用时使用的默认版本,则它\xe2\x80\x99s 按原样显示,否则\xe2\x80\x99s 放入括号中。

\n
\n

因此该库提供了 2.2.5 版本aio_write64,但只是为了向后兼容;还有\xe2\x80\x99s 默认使用的另一个版本\xe2\x80\x99s。同样,默认pthread_rwlock_timedwrlock版本是 2.34,但也提供了 2.2.5。

\n