シンボルの名前 (デマングルされているかどうか) と、他のライブラリに動的にリンクされているライブラリの名前があると仮定すると、そのシンボルを解決できるライブラリを見つけたいとします。
を使用しようとしましたが、nm
それに関する適切なドキュメントが見つかりません。このツールでは使用できないようです。objdump
readelf
gdb
似たようなものを提供していますが、これはデバッガーです。簡単なルックアップが必要です。デバッグ セッションを起動せずにこれを行う方法を知っていますか?
のデバッグ機能を使用ld-linux.so.2
して、elf オブジェクトのシンボル解決を探すことができます (例は amd64 の場合で、動的ローダー名はこの事実を反映しています)。
LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /bin/ls
上記は、曲に合わせて行を出力します。
60157: symbol=fclose; lookup in file=/bin/ls [0]
60157: symbol=fclose; lookup in file=/lib64/librt.so.1 [0]
60157: symbol=fclose; lookup in file=/lib64/libcap.so.2 [0]
60157: symbol=fclose; lookup in file=/lib64/libacl.so.1 [0]
60157: symbol=fclose; lookup in file=/lib64/libc.so.6 [0]
60157: binding file /bin/ls [0] to /lib64/libc.so.6 [0]: normal symbol `fclose' [GLIBC_2.2.5]
次に、出力を grep して、必要な情報を見つけることができます。
以下のライブラリが含まれる任意の elf オブジェクトでリンカーを呼び出すことができます。
LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /lib/libm.so.6