2016-08-13 105 views
1

我已经设置了一个新环境 - 这是一个包含Ubuntu 14.04(可靠)的Chromebook(华硕flip C100P - 基于ARM)的chroot。我已经安装了gcc和g ++。我创建了一个简单的 “你好,世界” 程序(test.c的),并通过编译它:无法运行使用gcc构建的可执行文件

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 NEEDED

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

%UNAME -a

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

我怀疑我有一个borked工具链,但我确实在这一点难倒。
有没有人有任何想法在这里发生了什么或如何进行发现问题?

+0

哇,我将这个Q保存在令人惊奇的cmds列表中,以检查...但是,尝试'printf“#!/ bin/bash \ necho Hello脚本!\ n”> ./myTest.sh; chmod 755 myTest.sh; 。/ myTest.sh'。 (我可能错过了''''或'''等,但希望你能明白)。如果这个失败了,那么你的''''dir或者其中的一个“上面的”目录是有问题的。有关一些想法,请参阅http://stackoverflow.com/a/26718467/620097。祝你好运。 – shellter

+1

你有没有试过编译过类似'-march = i686'的东西?看起来您的二进制文件是为Chromebook生成的,而不是为Ubuntu生成的(您可以尝试将可执行文件复制到Chromebook,并在那里运行,这证实了这一点)。 – MondKin

+0

@Mondkin - 错误的架构。这是在ARM上。即使我指定了ARM的选项,我也不认为它会有所作为。我不理解您的评论 - “为Chromebook而不是为Ubuntu生成”;我没有使用交叉工具集。我在Chromebook上运行Ubuntu,在运行Ubuntu的chroot中执行gcc。 – youngmj

回答

1

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

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

查看'mount'的输出,看起来SD卡上的文件系统使用'noexec'挂载。我相信这是我的问题的根源 - 我想我可以用'exec'标志为这个文件系统添加一个fstab条目,并且所有应该都可以工作。但是,我决定不这样做 - 毕竟,我只需要加密文件系统(它是SD卡上的容器文件)中的项目以允许执行文件,并使文件对SD卡文件系统直接执行可能会稍微不够安全。因此,我决定简单地将用于开发工作的目录树更改为我的用户主目录(该目录位于chroot中Ubuntu使用的加密文件系统中,显然位于SD卡中的容器文件中,但不直接在SD卡分区本身的文件系统中)。我放弃了从我的chroot和ChromeOS环境立即访问文件,但是,如果我将来真的需要这些文件,我可以设置一个共享 - 可能在一个单独的设备/分区(USB闪存驱动器)上。

相关问题