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".
Código: text
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