2013-09-25 4 views
0

j'expérimentais et ai le code assembleur suivant, qui fonctionne très bien, sauf que je reçois un "Segmentation fault (core dumped)" message juste avant mon programme se termine:Assemblée erreur de segmentation syscall 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 

Peu importe si j'ai ou non ret à la fin; Je reçois toujours le message.

Quel est le problème? J'utilise x86 et nasm. J'utilise x86 et nasm.

+2

Vous devez syscall explicitement la sortie. –

+0

sympa :) merci! – itpdg

+1

Copie possible de [Erreur de segmentation Nasm] (https://stackoverflow.com/questions/19760002/nasm-segmentation-fault) –

Répondre

3

Comme n.m. dit dans les commentaires, le problème est que vous ne sortez pas du programme, donc l'exécution s'exécute dans le code poubelle et vous obtenez un segfault.

Qu'est-ce que vous avez besoin est:

%define ___SYSCALL_EXIT 1 

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