sh - 薛定谔的文件

标签 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

这怎么可能?

最佳答案

我发现有人有同样的问题(有相关解释)

Running 32bit binary on a 64bit system

引用最重要的句子:

This situation often arises when you try to run a binary for the right system (or family of systems) and superarchitecture but the wrong subarchitecture. Here you have ELF binaries on a system that expects ELF binaries, so the kernel loads them just fine. They are i386 binaries running on an x86_64 processor, so the instructions make sense and get the program to the point where it can look for its loader. But the program is a 32-bit program (as the file output indicates), looking for the 32-bit loader /lib/ld-linux.so.2, and you've presumably only installed the 64-bit loader /lib64/ld-linux-x86-64.so.2 in the chroot.

You need to install the 32-bit runtime system in the chroot: the loader, and all the libraries the programs need. On Debian amd64, the 32-bit loader is in the libc6-i386 package. You can install a bigger set of 32-bit libraries by installing ia32-libs.

我打赌有更好的方法来验证这一点,但我会尝试执行

ldd ./f

并在输出中搜索执行它所需的加载程序

关于sh - 薛定谔的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481554/

相关文章:

shell - 后台运行时进程未记录

shell - 我如何将 aria2 与 pacman 一起使用?

python - 如何将 python 3.7 降级到 3.6?

linux-kernel - 这个 Linux 内核跟踪意味着什么?

linux - 使用标准输入将一些十六进制字符串放入 xxd 不会生成任何输出

mysql - 用于创建新 SQL 转储的 Shell 脚本

linux - 未绑定(bind) DNS 的 NetworkManager

linux - 为什么文件的 Date Modified 属性改变了,但我确定文件根本没有被修改

postgresql - 具有大量表的 postgresql 的性能(EG : 1 million tables)?

awk 不打印整行