薛定谔的档案

时间:2013-01-23 14:01:09

标签: sh archlinux ext4

我对以下命令序列感到困惑。

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

这怎么可能?

1 个答案:

答案 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