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
; 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