どのように私はELFの依存関係が満たされていないされて見つけることができますか?

StackOverflow https://stackoverflow.com/questions/1562071

  •  21-09-2019
  •  | 
  •  

質問

私は(私の質問は、LSB のに固有のものではないことをのノート)LSB SDKを使用してテストELFプログラムを構築しました

$ /opt/lsb/bin/lsbcc tst.c
$ ls -l a.out 
-rwxr-xr-x 1 math math 10791 2009-10-13 20:13 a.out
$ file a.out 
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

しかし、私はそれを起動することができません(のはい、私はの...ディレクトリ内の のあるあなたのファイルを保証する):

$ ./a.out 
bash: ./a.out: No such file or directory

$ uname -a
Linux math 2.6.28-15-generic #52-Ubuntu SMP Wed Sep 9 10:48:52 UTC 2009 x86_64 GNU/Linux

私は満たしていませんが、私はそれを見つける方法がわからないELF依存性があると思います。ミッシングリンクを発見するために使用できるライブラリのためのLDDと似たようなツールはありますか?

:LSBコンパイラが動作しているので、

私はそれが2.6.15 / 2.6.28-15差に関係しているとは思いません

$ file /opt/lsb/bin/lsbcc 
/opt/lsb/bin/lsbcc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped

念のため、ここではa.outのELFの動的なセクションがあります:

 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000c (INIT)               0x400428
 0x000000000000000d (FINI)               0x400638
 0x0000000000000004 (HASH)               0x400278
 0x0000000000000005 (STRTAB)             0x400350
 0x0000000000000006 (SYMTAB)             0x4002a8
 0x000000000000000a (STRSZ)              121 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x600fe8
 0x0000000000000002 (PLTRELSZ)           24 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x400410
 0x0000000000000007 (RELA)               0x4003f8
 0x0000000000000008 (RELASZ)             24 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x4003d8
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x4003ca
 0x0000000000000000 (NULL)               0x0
役に立ちましたか?

解決

ELFインタプリタが欠落しているときに何が起こるかのようなこのルックスます。

(または類似; LSBバージョンおよびアーキテクチャによって異なります)

その/lib/ld-lsb.so.2を確認存在します。 lddreadelf -lが実行可能インタプリタELFが要求している表示できるようになります。

lsbcc(またはLSBツールチェーンの中で何かが)、私はあなたがそこ(glibcではいつもここにかなり優れた後方互換性を提供している)、むしろ愚かですが、だと思う理由のために、おそらく、コンパイラに/lib/ld-linux.so.2を渡すことによって、システムのデフォルトの-Wl,--dynamic-linker=/lib/ld-lsb.so.2を上書きしますそれを持っています。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top