【问题标题】:Schrödinger's file薛定谔的档案
【发布时间】:2013-01-23 14:01:09
【问题描述】:

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

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

这怎么可能?

【问题讨论】:

  • 有人在骗你,并在你执行的第二个和第三个命令之间快速删除了文件? (我无法使用 Ubuntu 重现它)
  • eek...ls f 前后的输出是什么?
  • 这种情况是否持续发生?还是这是一次性的?
  • @davide-berra :添加了ls f(带有“-l”以显示权限)和显示我的内核版本的命令。 @aaron-waibel:这在我以前从未发生过。我的一个朋友尝试在他的 Debian 机器上执行二进制文件(据我了解),文件执行得很好。我运行的是 64 位操作系统,文件是 32 位二进制文​​件,但我认为这不是问题,因为我的朋友也在运行 64 位操作系统。我已经 3 个月没有重新启动计算机了,与此同时,我(几乎可以肯定)通过 pacman 获取了一个新内核。你认为重启会有帮助吗?

标签: sh archlinux ext4


【解决方案1】:

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

Running 32bit binary on a 64bit system

引用最重要的句子:

当您尝试运行正确的二进制文件时,经常会出现这种情况 系统(或系统家族)和超级架构,但错误 子架构。在这里,您在期望的系统上有 ELF 二进制文件 ELF 二进制文件,所以内核加载它们就好了。他们是i386 在 x86_64 处理器上运行的二进制文件,因此指令使 感知并让程序达到可以寻找它的地步 装载机。但是程序是32位程序(作为文件输出 指示),寻找 32 位加载程序 /lib/ld-linux.so.2,和 您大概只安装了 64 位加载程序 /lib64/ld-linux-x86-64.so.2 在chroot中。

您需要在 chroot 中安装 32 位运行时系统: loader,以及程序需要的所有库。在 Debian amd64 上, 32 位加载器位于 libc6-i386 包中。你可以安装一个更大的 通过安装 ia32-libs 来设置 32 位库。

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

ldd ./f

并在输出中搜索需要哪个加载器来执行它

【讨论】:

    【解决方案2】:

    man 2 执行:

    ENOENT The file filename or a  script  or  ELF  interpreter  does  not
           exist,  or a shared library needed for file or interpreter can‐
           not be found.
    

    您可以针对此二进制文件运行 ldd 以查找无法映射的库并从 multilib 安装它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多