2013-09-25 48 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