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

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

查看运行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

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

答案1

-T选项的描述:

如果版本是解析对符号的无版本引用时使用的默认版本,则按原样显示,否则将其放入括号中。

因此该库提供了 2.2.5 版本aio_write64,但只是为了向后兼容;默认情况下使用另一个版本。同样,默认pthread_rwlock_timedwrlock版本是 2.34,但也提供了 2.2.5。

相关内容