为什么不产生任何输出?
我从教程中复制粘贴以下内容:
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
然后:
nasm -f elf hello.asm
和
ld -melf_i386 -s -o hello hello.o
和
./hello
一切都没有任何错误,我最终得到一个hello可执行文件。 我执行它,但绝对没有输出。我在linux 64位上。我尝试了不同的程序,一些在64位,一切似乎编译没有错误,但然后再没有输出。
这是strace ./hello
execve("./hello", ["./hello"], [/* 17 vars */]) = -1 EACCES (Permission denied)
dup(2) = 3
fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f616a168000
lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n", 32strace: exec: Permission denied) = 32
close(3) = 0
munmap(0x7f616a168000, 4096) = 0
exit_group(1) = ?
有人可以解释这个吗?
提前致谢。
我解决了。问题只是我的分区安装了'user'选项,暗示'noexec'。