2013-09-25 25 views
0

我尝试并具有以下汇编代码,它工作得非常好,但我在我的节目之前改正了“分段故障(核心转储)”消息结尾:大会的Linux系统调用分段错误

GLOBAL _start 

%define ___STDIN 0 
%define ___STDOUT 1 
%define ___SYSCALL_WRITE 0x04 

segment .data 
segment .rodata 
    L1 db "hello World", 10, 0 
segment .bss 
segment .text 
_start: 
    mov eax, ___SYSCALL_WRITE 
    mov ebx, ___STDOUT 
    mov ecx, L1 
    mov edx, 13 
    int 0x80 

最后我是不是有ret;我仍然收到消息。

有什么问题?

我正在使用x86和nasm。

+2

你需要明确的系统调用退出。 –

+0

不错:)谢谢! – itpdg

+1

[Nasm分段错误]的可能重复(https://stackoverflow.com/questions/19760002/nasm-segmentation-fault) –

回答

3

至于中午。在评论中说,问题是你不退出程序,所以执行运行到垃圾代码,你会得到一个段错误。

你需要的是:

%define ___SYSCALL_EXIT 1 

// ... at the end of _start: 
    mov eax, ___SYSCALL_EXIT 
    mov ebx, 0 
    int 0x80