如何在 .so ELF 格式文件的动态符号名称中解释 @abc(01)?
Posted
技术标签:
【中文标题】如何在 .so ELF 格式文件的动态符号名称中解释 @abc(01)?【英文标题】:How to interpret @abc(01) in dynamic symbol name of an .so ELF formatted file? 【发布时间】:2019-01-18 08:24:46 【问题描述】:我有两个非常相似的 .so 文件。对它们使用 readelf --syms --wide 我收到...
... 第一个:
631: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_guard_acquire@CXXABI_1.3 (18)
666: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_pure_virtual@CXXABI_1.3 (18)
...第二次:
671: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_guard_acquire@CXXABI_1.3 (21)
706: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_pure_virtual@CXXABI_1.3 (21)
(18) 和 (21) 分别是什么意思?
【问题讨论】:
【参考方案1】:(18) 和 (21) 分别是什么意思?
它是对应版本定义中.vd_version
的值(elf.h
中的ElfXX_Verdef
)。例如:
readelf -Ws /bin/date | egrep ' (setenv|clock_gettime)'
14: 0000000000000000 0 FUNC GLOBAL DEFAULT UND clock_gettime@GLIBC_2.17 (5)
15: 0000000000000000 0 FUNC GLOBAL DEFAULT UND setenv@GLIBC_2.2.5 (3)
readelf -V /bin/date
...
Version needs section '.gnu.version_r' contains 1 entry:
Addr: 0x0000000000000fd8 Offset: 0x000fd8 Link: 6 (.dynstr)
000000: Version: 1 File: libc.so.6 Cnt: 6
0x0010: Name: GLIBC_2.14 Flags: none Version: 7
0x0020: Name: GLIBC_2.4 Flags: none Version: 6
0x0030: Name: GLIBC_2.17 Flags: none Version: 5
0x0040: Name: GLIBC_2.3.4 Flags: none Version: 4
0x0050: Name: GLIBC_2.2.5 Flags: none Version: 3
0x0060: Name: GLIBC_2.3 Flags: none Version: 2
请注意,GLIBC_2.2.5
具有 Version: 3
,GLIBC_2.17
具有 Version: 5
。
【讨论】:
你能再解释一下吗?就我而言,这两个文件都输出“GLIBC_2.2.5”等内容,但一次使用版本 16,一次使用版本 18。以类似的方式,它们都显示“CXXABI_1.3”一次使用版本 18,一次使用版本 21 . 所以这个Version并没有真正指定库的版本,是吗?那它代表什么? @gebbissimo 请使用您感到困惑的 actual 输出编辑您的问题(或提出新问题)。 “那它代表什么?”——它代表.vd_version
字段的值。您的问题似乎是:“该值是如何设置的”,这是一个完全不同的问题。以上是关于如何在 .so ELF 格式文件的动态符号名称中解释 @abc(01)?的主要内容,如果未能解决你的问题,请参考以下文章