It is version symbol, where @GLIBC_2.2.5
comes from.
The number references to the entry of .gnu.version_r
section
ELF symbol versioning is a GNU extension to ELF. When resolving a symbol with version, if the target symbol also has version, the version must match, or the symbol can be resolved.
To maintain compatibility the version is not stored inside .dynsym
section. Instead it is stored inside .gnu.version
section.
.gnu.version
has exactly same number of entries as .dynsym
section, each entry store the corresponding symbol version (with 0 means no version requirement).
version is a string, and .gnu.version
stores a index which references to the .gnu.version_r
table. The number follow the symbol name is the index.
Following describes how to find the version string of a symbol:
- assume resolving
T
symbol
- the symbol is located at n-th entryof
.dynsym
section
- look n-th entry of
.gnu.version
section, get the version number m
- traverse
.gnu.version_r
section, find entry with version number m
- the entry in
.gnu.version_r
section contains the corresponding version string (an index reference to .dynstr
section)
The number following symbol name is the number m