Как интерпретировать @abc (01) в имени динамического символа файла в формате .so ELF? - PullRequest
0 голосов
/ 18 января 2019

У меня есть два очень похожих .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 Ответ

0 голосов
/ 18 января 2019

Что означают (18) и (21) соответственно?

Это значение .vd_version из соответствующего определения версии (ElfXX_Verdef в elf.h). Например:

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.

...