linux'不能执行二进制文件'我编译的每个可执行文件,chmod 777没有帮助

我跑红了linux 7.3(老,我知道),在过去的几个月中,我一直在学习汇编编程,编写小程序和编译与nasm。 几个月来,情况一直很好,现在由于一些未知的原因,我无法执行任何我编译的程序。

nasm file.s //used to work just fine, then I'd execute ./file 

现在,当我运行./file时,首先我得到“权限被拒绝”,这从来没有发生过。 那么,一旦我chmod +777文件,我得到“不能执行二进制文件”。

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

以root身份login不会改变任何内容。 所有的build议都欢迎,谢谢!

nasm不生成可执行文件,而只是一个目标文件(如gcc -c)。 你仍然需要运行链接器。

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

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

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

如果使用noexec选项挂载您所操作的文件系统,则会发生这种情况。 你可以通过mount | grep noexec来检查 mount | grep noexec ,看看你目前的工作目录是否受到影响。

“不能执行二进制文件”是错误代码ENOEXECstrerror(3)消息。 这有一个非常具体的含义:(引用execve(2)

 [ENOEXEC] The new process file has the appropriate access permission, but has an unrecognized format (eg, an invalid magic number in its header). 

那么这意味着你的nasm调用是不是产生一个可执行文件,而是其他的东西。 正如约翰·库格尔曼(John Kugelman)所建议的, file命令会告诉你它是什么(user502515很可能是正确的,它是一个未链接的目标文件,但是我从来没有用过nasm,所以我不知道)。

顺便说一句,如果你现在学习GAS /“AT&T”汇编语法,而不是当你需要重写你的汇编代码,使其没有采用Intel bizarro-world语法时,你会为自己做一个忙。 我希望你只使用汇编程序来实现内部循环子程序,而这些子程序实际上需要手动优化。

这只是发生在我身上。 运行后

file <executable name>

<file name> ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped输出<file name> ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

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

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