1

我已经设置了一个新环境 - 它是一个在 Chromebook(Asus Flip C100P - 基于 ARM)中包含 Ubuntu 14.04(可信赖)的 chroot。我已经安装了 gcc 和 g++。我创建了一个简单的“hello, world”程序(test.c)并通过以下方式编译它:

 gcc -o t.exe test.c

当我运行 ./t1.exe 时,我得到以下信息:

bash: ./t.exe: Permission denied

请注意,我以 root 身份执行,并且 ./t.exe 的权限设置为完全开放(chmod 777,通过 ls -l 验证)。

所以我尝试确定出了什么问题 - 这是我尝试过的:

% 文件 ./t.exe

./t.exe: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=82a6c6227e0f7171a68c71a74c6e6396e37e6675, not stripped

%ldd ./t.exe

not a dynamic executable

% readelf -d ./t.exe | 需要 grep

0x00000001 (NEEDED)                     Shared library: [libc.so.6]

% dpkg -l libc6

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  libc6:armhf    2.19-0ubuntu armhf        Embedded GNU C Library: Shared li

% 猫 /etc/ld.so.conf.d/*

# Multiarch support
/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/mesa-egl
/usr/lib/arm-linux-gnueabihf/mesa
/usr/lib/arm-linux-gnueabihf/libfakeroot
# libc default configuration
/usr/local/lib

% ls -l libc.so.6

lrwxrwxrwx 1 root root 14 Aug 12 19:37 libc.so.6 -> /lib/libc.so.6

% ls -l /usr/local/lib/libc.so.6

lrwxrwxrwx 1 root root 14 Aug 12 18:21 /usr/local/lib/libc.so.6 -> /lib/libc.so.6

% ls -l /usr/lib/libc.so.6

lrwxrwxrwx 1 root root 14 Aug 12 19:37 /usr/lib/libc.so.6 -> /lib/libc.so.6

% ls -l /lib/libc.so.6

lrwxrwxrwx 1 root root 34 Aug 12 18:11 /lib/libc.so.6 -> /lib/arm-linux-gnueabihf/libc.so.6

% ls -l /lib/arm-linux-gnueabihf/libc.so.6

lrwxrwxrwx 1 root root 12 May 26 07:55 /lib/arm-linux-gnueabihf/libc.so.6 -> libc-2.19.so

% ls -l /lib/arm-linux-gnueabihf/libc-2.19.so

-rwxr-xr-x 1 root root 902876 May 26 07:56 /lib/arm-linux-gnueabihf/libc-2.19.so

% objdump -a /lib/arm-linux-gnueabihf/libc-2.19.so

/lib/arm-linux-gnueabihf/libc-2.19.so:     file format elf32-littlearm

/lib/arm-linux-gnueabihf/libc-2.19.so

% objdump -a ./t.exe

./t.exe:     file format elf32-littlearm

./t.exe

% unname -a

Linux localhost 3.14.0 #1 SMP PREEMPT Tue Aug 2 21:07:06 PDT 2016 armv7l armv7l armv7l GNU/Linux

我怀疑我有一个破旧的工具链,但在这一点上我真的很难过。
有没有人对这里发生的事情或如何继续寻找问题有任何想法?

4

3 回答 3

1

我在 Chromebook 上通过crouton. 我正在学习go编程语言,并且能够go解释我的“Hello, World!”。程序,但是当我让它编译代码时,我无法运行生成的二进制文件。我忘记了这个noexec问题。我所要做的就是重新安装 SD 卡exec并解决权限问题。

对我来说是:

sudo mount -o remount,exec /media/removable/SD\ Card

于 2020-12-31T15:48:58.470 回答
1

所以事实证明,我最初使用的是可移动 SD 卡上的目录,并且我也使用该卡来存放我的加密 chroot。(不推荐顺便说一句 - 非常慢。)因此,ChromeOS 和 Ubuntu 可以看到和访问该目录,而无需明确设置共享。

在网上寻找答案时,我偶然发现了以下内容:https ://ubuntuforums.org/showthread.php?t=1956802 。事实证明,我的 /etc/fstab 文件实际上是空的 - 其中仅包含“# UNCONFIGURED FSTAB FOR BASE SYSTEM”。

查看“mount”的输出,SD 卡上的文件系统似乎是使用“noexec”安装的。我相信这是我的问题的根源——我想我可以为这个文件系统添加一个带有“exec”标志的 fstab 条目,一切都应该工作。

然而,进一步考虑这一点,我决定不这样做 - 毕竟,我只需要加密文件系统中的项目(它们是 SD 卡上的容器文件)来允许执行文件,并在 SD 卡上制作文件直接可执行的文件系统可能稍微不安全。因此,我决定简单地将用于开发工作的目录树更改为我的用户主目录下(该目录位于 Ubuntu 在 chroot 中使用的加密文件系统中,并且显然位于容器文件中的 SD 卡上,但不是直接在 SD 卡分区本身的文件系统中)。我放弃了从我的 chroot 和 ChromeOS 环境立即访问文件,但是,如果我将来真的需要这个,我可以设置一个共享 - 可能在一个单独的设备/分区(USB 闪存驱动器)上。

于 2016-08-15T21:08:14.573 回答
0
sudo mount -o remount,exec /dev/sdXY

这适用于我的 chromebook。我遇到过同样的问题。

于 2019-07-11T20:15:30.787 回答