[problema] SOCKET EN FASM

Iniciado por afdlkglfgfdgfhgf, 29 Marzo 2010, 01:50 AM

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

afdlkglfgfdgfhgf

hola, tengo un pequeño problema con un codigo que hize.

Código (ASM) [Seleccionar]


include 'win32ax.inc'

.data
;Datos de Conexion.
puerto dd 123
host   db '127.0.0.1',0

;Variables.
wsa WSADATA     ? ;puntero a una estructura WSADATA.
sock dd     ? ;Handle del socket.
conec hostent     ? ;puntero a la estructura hostent
cliente sockaddr_in ? ;puntero a la estructura sockaddr_in

.code
;Funcion que se ejecuta cuando a habido algun error
proc FIND_ERROR
     ;limpiamos y saltamos al inicio.
     call [WSACleanup]
     ;Limpiamos
     push 2000
     call [Sleep]
     ;Esperamos 2 segundos.
     jmp start
     ;saltamos al inicio del programa.
endp

start :
;Cuerpo del Programa.
push wsa
push 200
call [WSAStartup]
;iniciamos la *.dll con su respectiva Version.
cmp eax,0
jz  siguiente
;Comprobamos que la funcion aya sido ejecutada
;Correctamente
call FIND_ERROR


;de lo contrario, continuamos con nuestro
;programa.
siguiente :

push 6 ;IPPROTO_TCP
push 1 ;SOCK_STREAM
push 2 ;AF_INET
call [socket]
;Creamos un Identificador de Socket.
cmp eax,-1
jnz siguiente2

;si hay un error Llamamos ala funcion
;FIND_ERROR
call FIND_ERROR

siguiente2 :
mov [sock],eax;Guardamos el Handle.
mov eax,0 ;Limpiamos el Registro eax.

push host
call [gethostbyname]

mov [conec],eax  ;guardamos el retorno de la funcion en
;la variable conec.

mov eax,0
push [puerto]
call [htons]

mov [cliente.sin_family],2 ;AF_INET
mov [cliente.sin_port],ax
mov eax,[conec]
mov [cliente.sin_addr],eax

push 20
push cliente
push [sock]
call[connect]

cmp eax,0
jz funciona

call FIND_ERROR

;Cerramos el proceso
push 0
call [ExitProcess]

.end start



el programa no conecta al servidor echo en C, creo que hay un problema con la funcion connect, bueno espero que alguien me pueda ayudar .

SSaludos.

bizco

la etiqueta funciona no existe, sales de un call con un jmp .... ¿quien saca de la pila la direccion de retorno?. Lee aqui. depura tu programa y veras que te esta devolviendo connect, no puedes pretender hacer que tu programa solo funcione en "una direccion" y que no sea capaz de controlar los errores que pueda devolver una funcion, volver a empezar una y otra vez no es una solucion.