2017-06-11 1 views
-1
bits 32 

section .text 

    global _start 

_start: 

    ;socket 
    mov eax, 0x66 
    mov ebx, 0x1 
    push 0x0 
    push 0x1 
    push 0x2 
    mov ecx, esp 
    int 0x80 

    ;bind 
    mov edx, eax 
    xor eax, eax 
    mov eax, 0x66 
    mov ebx, 0x2 
    push word 0x0 
    push word 0x5c11 
    push word 0x2 
    mov ecx, esp 
    push 0x16 
    push ecx 
    push edx 
    int 0x80 

    ;listen 
    push eax 
    mov eax, 0x66 
    mov ebx, 0x4 
    push edx 
    mov ecx, esp 
    int 0x80 

    ;accept 
    push eax 
    push eax 
    push edx 
    mov ecx, esp 
    int 0x80 
$ nasm -f elf32 socket.asm ; ld -m elf_i386 -o socket socket.o 

$ ./socket 

Segmentation fault (core dumped) 

J'ai compilé le fichier binaire sur Ubuntu 16.04 Bureau x86_64.Segmentation fault essayant de créer une socket - Assemblée

Une idée?

+1

J'ai une idée: utiliser un débogueur pour déterminer où est le problème. –

+0

Je suis avec M. Gray, vous pouvez esquiver en utilisant un débogueur dans de nombreuses langues, mais pas d'assemblage. – Chris

+0

En utilisant le débogueur, j'ai remarqué que rip est écrasé avec une adresse inexistante. J'ai donc ajouté une sortie à la fin et maintenant je ne reçois aucun défaut de segmentation. Est-ce correct? – wrynux

Répondre

2

J'ai ajouté une sortie à la fin, et maintenant je ne reçois pas d'erreur de segmentation.

mov eax, 0x1 
mov ebx, 0x0 
int 0x80 
+2

Oui, c'est correct. +1 pour résoudre votre propre problème. Deux conseils: (1) lors de la publication du code sur Stack Overflow, sélectionnez le bloc entier et appuyez sur Ctrl + K (ou cliquez sur le bouton '{}' dans la barre d'outils) pour le formater en code. (2) 'mov reg, 0' est écrit plus couramment et plus efficacement sous la forme' xor reg, reg'. Donc, dans ce cas, la deuxième ligne pourrait simplement être 'xor ebx, ebx'. –