Fallo de socket en un programa de ensamblador

Iniciado por catarsis, Julio 14, 2018, 03:36:11 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Este codigo hecho con nasm pone en espera una conexion, se ejecuta bien hasta el punto donde quiere mandar la respuesta y cuando se quiere hacer la conexion por telnet (telnet 'localhost' 9000) hace la conexion pero del lado del servidor(el programa en nasm) se produce una   "Violación de segmento".
ESTE CODIGO NO ES MIO, LO ESTABA LEYENDO Y HACIENDO PRUEBAS Y ME DI CUENTA DE LA VIOLACION DE SEGMENTO

Código: text

; constants go here
section .data
    start: db 'Starting Socket...',0
    start_len: equ $-start

; variables go here
section .bss
    socket: resd   1
    socket_address: resd    2

; starttttt
section .text
    global _start

open_socket:

    ; Primir que incio
    mov eax,4
    mov ebx,1
    mov ecx,start
    mov edx,start_len
    int 80h

    ; Pushear los valores para el socket
    push    dword   6
    push    dword   1
    push    dword   2

    ; Abriendo un socket
    mov eax,102 ; 102
    mov ebx,1
    mov ecx,esp
    int 80h

    mov dword[socket],eax

    ; Estos son los parametros para enlazarse
    push    dword   0x00000000 ; localhost (127.0.0.1)
    push    dword   0x2823 ; port 9000
    push    word    2 ; AF_INET (IPv4)
    mov [socket_address],esp

    push    dword  16
    push    dword   [socket_address]
    push    dword   [socket]

    ; llamada al socket para enlazarse
    mov eax,102
    mov ebx,2
    mov ecx,esp
    int 80h

    ; parametros para la escucha
    push    byte    20
    push    dword   [socket]

    ; call listen()
    mov eax,102
    mov ebx,4
    mov ecx,esp
    int 80h

    ; Ahora tenemos que aceptar conexiones entrantes
    push    0
    push    0
    push    dword   [socket]

    ; Llamada accept()
    mov eax,102
    mov ebx,5
    mov ecx,esp
    int 80h

    ;Pusher dentro de la pila para mandarlo
    push    dword   0
    push    dword   [start_len]
    push    dword   [start]
    push    dword   [socket]

    ; Mandar algo de regresO
    ; AQUI ES DONDE LA VIOLACION DE SEGMENTO OCURRE
    mov eax,102
    mov ebx,9 ; send is 9
    mov ecx,esp
    int 80h

;Salir del programa
exit:
    mov eax,1
    mov ebx,0
    int 80h

;Main
_start:

    ; open it
    call open_socket
ktarzyz