我正在使用linux 7.3(旧的,我知道),并且在过去的几个月里,我一直在学习汇编编程,编写小程序并使用nasm进行编译。几个月来,事情进展顺利,现在由于某种未知的原因,我无法执行我编译的任何程序。
nasm file.s //used to work just fine, then I'd execute ./file
现在,当我运行./file时,首先我得到“许可被拒绝”,这在以前从未发生过。然后,一旦我chmod +777文件,我得到“无法执行二进制文件”。
我没有IDEA为什么会这样,但是非常令人沮丧,因为我编译后不会再运行了。
以root用户身份登录不会改变任何内容。 欢迎提出所有建议,谢谢!!
答案 0 :(得分:3)
nasm不会生成可执行文件,只会生成一个目标文件(如gcc -c)。您仍然需要在其上运行链接器。
N.B。:“0777几乎总是错的。”
答案 1 :(得分:2)
在二进制文件上运行file
命令,并确保它们被正确识别为可执行文件。
同时尝试ldd
命令。由于完全相同的原因,它很可能会失败,但值得一试。
答案 2 :(得分:1)
如果您操作的文件系统使用noexec
选项挂载,则会发生这种情况。您可以通过执行mount | grep noexec
来检查它,看看您当前的工作目录是否受此影响。
答案 3 :(得分:1)
“无法执行二进制文件”是错误代码strerror(3)
的{{1}}消息。这有一个非常具体的含义:(引用ENOEXEC
)的联机帮助页
execve(2)
那么这意味着,你的[ENOEXEC] The new process file has the appropriate access
permission, but has an unrecognized format
(e.g., an invalid magic number in its header).
调用不会产生可执行文件,而是产生其他东西。正如John Kugelman建议的那样,nasm
命令将告诉你它是什么(user502515很可能是正确的,它是一个未链接的目标文件,但我自己从未使用过nasm,所以我不知道。)
答案 4 :(得分:1)
这恰好发生在我身上。运行后
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
问题是我试图在 32位计算机上运行 64位应用程序!
答案 5 :(得分:0)
您可以尝试在/ var / log中查看从此开始到系统中的某些更改。