尝试在 64 位 Ubuntu 16.04.6 LTS 系统上运行可执行文件时lmcrypt
,出现以下错误:
$ ./lmcrypt
-bash: ./lmcrypt: No such file or directory
据我所知,该文件是有效的 64 位可执行文件:
$ file ./lmcrypt
./lmcrypt: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.18, stripped
为了比较:
file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=d0bc0fb9b3f60f72bbad3c5a1d24c9e2a1fde775, stripped
我错过了什么?
编辑:readelf -l lmcrypt
返回以下输出
Elf file type is EXEC (Executable file)
Entry point 0x40512c
There are 8 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x00000000000001c0 0x00000000000001c0 R E 8
INTERP 0x0000000000000200 0x0000000000400200 0x0000000000400200
0x000000000000001a 0x000000000000001a R 1
[Requesting program interpreter: /lib64/ld-lsb-x86-64.so.3]
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000fcaf4 0x00000000000fcaf4 R E 200000
LOAD 0x00000000000fd000 0x00000000006fd000 0x00000000006fd000
0x0000000000009219 0x000000000000d808 RW 200000
DYNAMIC 0x00000000000fd788 0x00000000006fd788 0x00000000006fd788
0x0000000000000220 0x0000000000000220 RW 8
NOTE 0x000000000000021c 0x000000000040021c 0x000000000040021c
0x0000000000000020 0x0000000000000020 R 4
GNU_EH_FRAME 0x00000000000da9c0 0x00000000004da9c0 0x00000000004da9c0
0x0000000000004ae4 0x0000000000004ae4 R 4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 8
Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .textidx .fini .rodata .eh_frame_hdr .eh_frame
03 .init_array .fini_array .jcr .data.rel.ro .dynamic .got .got.plt .data .fnp_dir .fnp_marker .bss
04 .dynamic
05 .note.ABI-tag
06 .eh_frame_hdr
07
答案1
按照这个帖子,看起来你应该安装该lsb
包:
sudo apt install lsb
这应该会给你所需的软件包/lib64/ld-lsb-x86-64.so.3
(刚刚在 Ubuntu 16.04.7 上测试过,确实如此)。
答案2
作为答案,这样这个问题就不会被孤立。目标系统上不存在二进制文件的 elf 解释器。默认情况下,解释器存在于与 REL 兼容的系统上,但不存在于 Ubuntu 16.04 上。使用apt-get install lsb
可能会有帮助,但我无法验证,因为操作系统已经过了使用寿命。