15

一連の .so ファイルを使用するバイナリがあります。

bash-3.00$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.21, dynamically linked (uses shared libs), not stripped

しかし、このファイルに対して ldd を実行すると、バイナリが依存している .so ファイルを取得できません。

bash-3.00$ ldd foo
        not a dynamic executable
bash-3.00$

readelf は、バイナリで使用される共有ライブラリのリストを表示します..

bash-3.00$ readelf -d  foo
Dynamic segment at offset 0x17c810 contains 70 entries:

  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libdl.so.2]

この場合、ldd がライブラリの依存関係を取得できないのはなぜですか?

4

2 に答える 2

7

コメントの1つが言うように-64ビットシステムでlddを使用して32ビットELFオブジェクトを検査しようとしました。ldd は標準の動的リンカーを使用して依存関係を追跡するため、検査対象の ELF オブジェクトに必要なリンカーがプラットフォームにない場合、ldd は失敗します。このような状況では、Readelf と objdump の方が堅牢です。

于 2014-10-22T20:12:37.140 に答える