可执行文件'hello world'不会生成输出

时间:2015-03-06 04:36:25

标签: linux assembly output nasm

为什么不产生任何输出?

我从教程中复制粘贴以下内容:

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'。

0 个答案:

没有答案