我对以下命令序列感到困惑。
sh-4.2$ pwd
/home/willard
sh-4.2$ ls -l f
-rwxr-xr-x 1 willard users 59116 Jan 23 14:54 f
sh-4.2$ file f
f: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0xea0e08ff2b5a062698d45b78177acdd6bf140d1f, stripped
sh-4.2$ ./f
sh: ./f: No such file or directory
sh-4.2$ strace ./f
execve("./f", ["./f"], [/* 32 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
sh-4.2$ ls -l f
-rwxr-xr-x 1 willard users 59116 Jan 23 14:54 f
sh-4.2$ uname -a
Linux xdat10 3.6.2-1-ARCH #1 SMP PREEMPT Fri Oct 12 23:58:58 CEST 2012 x86_64 GNU/Linux
这怎么可能?
答案 0 :(得分:4)
我发现有人遇到同样的问题(有相关解释)
Running 32bit binary on a 64bit system
引用最重要的句子:
当您尝试为右侧运行二进制文件时,通常会出现这种情况 系统(或系统系列)和超级体系结构但错误 子体系。在这里,您可以在期望的系统上使用ELF二进制文件 ELF二进制文件,因此内核加载它们就好了。他们是i386 在x86_64处理器上运行的二进制文件,所以说明文件 感觉并使程序达到可以寻找它的程度 装载机。但该程序是一个32位程序(作为文件输出 表示),寻找32位加载器/lib/ld-linux.so.2,和 你可能只安装了64位加载器 chroot中的/lib64/ld-linux-x86-64.so.2。
您需要在chroot中安装32位运行时系统: 加载程序,以及程序所需的所有库。在Debian amd64上, 32位加载程序位于libc6-i386包中。你可以安装更大的 通过安装ia32-libs来设置32位库。
我打赌有更好的方法来验证这个,但我会尝试执行
ldd ./f
并在输出中搜索需要加载的exec'it