Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux';无法执行二进制文件';在我编译的每个可执行文件上,chmod 777都不会';帮不上忙_Linux_Assembly_Nasm - Fatal编程技术网

linux';无法执行二进制文件';在我编译的每个可执行文件上,chmod 777都不会';帮不上忙

linux';无法执行二进制文件';在我编译的每个可执行文件上,chmod 777都不会';帮不上忙,linux,assembly,nasm,Linux,Assembly,Nasm,我现在运行的是RedHadLinux7.3(我知道是旧的),在过去的几个月里,我一直在学习汇编编程、编写小程序和使用nasm编译。几个月来,一切都很顺利,现在不知什么原因,我无法执行我编译的任何程序 nasm file.s //used to work just fine, then I'd execute ./file 现在,当我运行./file时,首先会得到“权限被拒绝”,这以前从未发生过。然后,一旦输入chmod+777文件,我就会得到“无法执行二进制文件” 我不知道为什么会发生这种情况

我现在运行的是RedHadLinux7.3(我知道是旧的),在过去的几个月里,我一直在学习汇编编程、编写小程序和使用nasm编译。几个月来,一切都很顺利,现在不知什么原因,我无法执行我编译的任何程序

nasm file.s //used to work just fine, then I'd execute ./file
现在,当我运行./file时,首先会得到“权限被拒绝”,这以前从未发生过。然后,一旦输入chmod+777文件,我就会得到“无法执行二进制文件”

我不知道为什么会发生这种情况,但这是非常令人沮丧的,因为我编译的任何东西都不会再运行了

以root用户身份登录不会更改任何内容。
欢迎所有建议,谢谢

如果使用
noexec
选项装载您操作的文件系统,则可能发生这种情况。您可以通过执行mount | grep noexec来检查这一点,并查看您当前的工作目录是否存在此问题。

您可以尝试查看/var/log,以了解从这一开始系统中发生的一些更改。

nasm不生成可执行文件,而只生成一个对象文件(如gcc-c)。您仍然需要在其上运行链接器


注意:“0777几乎总是错误的。”

在二进制文件上运行
文件
命令,确保它们被正确识别为可执行文件

还可以尝试
ldd
命令。由于完全相同的原因,它很可能会失败,但值得一试。

无法执行二进制文件”是错误代码的
strerror(3)
消息。这有一个非常具体的含义:(引用
execve(2)
)的手册页)

这意味着,您的
nasm
调用不是生成可执行文件,而是生成其他东西。正如John Kugelman所建议的那样,
file
命令将告诉您它是什么(user502515很可能是正确的,它是一个未链接的对象文件,但我自己从未使用过nasm,所以我不知道)


顺便说一句,如果您现在就学习GAS/“AT&T”汇编语法,而不是在需要为不使用Intel bizarro world语法的架构重写汇编代码时,您会帮自己一个忙。我真的希望您只对实际需要手动优化的内环子例程使用汇编。

这件事发生在我身上。跑步后

文件

它为GNU/Linux 2.6.15输出ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享库),不剥离


问题是我试图在一台32位的机器上运行一个64位的应用程序

谢谢你的建议。我打了那个,什么也没返回。听起来很奇怪,但我对红帽不熟悉。请问普通
mount
的输出是什么?如果是这个问题,错误消息将是“权限被拒绝”,而不是“无法执行二进制文件”。请在编译文件后发布
ls-l
的输出。“无法执行”错误可能是由错误生成的二进制文件(未链接、错误的体系结构等)引起的。
[ENOEXEC]          The new process file has the appropriate access
                   permission, but has an unrecognized format
                   (e.g., an invalid magic number in its header).