gpt4 book ai didi

linux - 如何找到未满足的 ELF 依赖项?

转载 作者:IT王子 更新时间:2023-10-28 23:54:09 29 4
gpt4 key购买 nike

我已经使用 LSB SDK 构建了一个测试 ELF 程序(请注意,我的问题并非特定于 LSB):

$ /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 的库工具可用于查找丢失的链接?

我认为这与 2.6.15/2.6.28-15 的差异无关,因为 LSB 编译器正在工作:

$ 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 解释器时发生的情况。

确保 /lib/ld-lsb.so.2(或类似的;因 LSB 版本和架构而异)存在。 lddreadelf -l 将能够显示您的可执行文件请求的 ELF 解释器。

(lsbcc(或 LSB 工具链中的某些东西)覆盖系统默认的 /lib/ld-linux.so.2,可能通过传递 -Wl ,--dynamic-linker=/lib/ld-lsb.so.2 到编译器,出于我认为相当愚蠢的原因(Glibc 一直在这里提供相当出色的向后兼容性),但你有它.)

关于linux - 如何找到未满足的 ELF 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562071/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com