動的シンボルテーブルエントリを印刷するobjdump -T
GNUユーティリティで実行される次の切り捨て出力を検討してください。ls
/usr/bin/ls: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.3) __ctype_toupper_loc
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) getenv
0000000000000000 DO *UND* 0000000000000000 (GLIBC_2.2.5) __progname
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) sigprocmask
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.3.4) __snprintf_chk
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) raise
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.34) __libc_start_main
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) abort
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) __errno_location
0000000000000000 DF *UND* 0000000000000000 (GLIBC_2.2.5) strncmp
0000000000000000 w D *UND* 0000000000000000 Base _ITM_deregisterTMCloneTable
Base
最後の行と列6はどういう意味ですか?たとえば、これが関数バージョンで(GLIBC_2.2.5)
あることは明らかです。しかし、これらの関数はどの外部ライブラリで定義されていますか?これを理解するのに役立ちます。glibc
strncmp
Base
答え1
Base
シンボルに関連付けられたバージョンがないことを意味します。つまりls
シンボルを提供するライブラリは、複数のバージョン(またはシンボル自体の場合はls
単一バージョン)を提供しません。ls
を使用して使用されているライブラリを表示できますldd /bin/ls
。
バラよりldd出力に複数のGLIBCバージョンがあることはどういう意味ですか?もっと学ぶ。