Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: afdlkglfgfdgfhgf en 29 Marzo 2010, 01:50 am



Título: [problema] SOCKET EN FASM
Publicado por: afdlkglfgfdgfhgf en 29 Marzo 2010, 01:50 am
hola, tengo un pequeño problema con un codigo que hize.

Código
  1.  
  2. include 'win32ax.inc'
  3.  
  4. .data
  5. ;Datos de Conexion.
  6. puerto dd 123
  7. host   db '127.0.0.1',0
  8.  
  9. ;Variables.
  10. wsa WSADATA     ? ;puntero a una estructura WSADATA.
  11. sock dd    ? ;Handle del socket.
  12. conec hostent     ? ;puntero a la estructura hostent
  13. cliente sockaddr_in ? ;puntero a la estructura sockaddr_in
  14.  
  15. .code
  16. ;Funcion que se ejecuta cuando a habido algun error
  17. proc FIND_ERROR
  18.     ;limpiamos y saltamos al inicio.
  19.     call [WSACleanup]
  20.     ;Limpiamos
  21.     push 2000
  22.     call [Sleep]
  23.     ;Esperamos 2 segundos.
  24.     jmp start
  25.     ;saltamos al inicio del programa.
  26. endp
  27.  
  28. start :
  29. ;Cuerpo del Programa.
  30. push wsa
  31. push 200
  32. call [WSAStartup]
  33. ;iniciamos la *.dll con su respectiva Version.
  34. cmp eax,0
  35. jz  siguiente
  36. ;Comprobamos que la funcion aya sido ejecutada
  37. ;Correctamente
  38. call FIND_ERROR
  39.  
  40.  
  41. ;de lo contrario, continuamos con nuestro
  42. ;programa.
  43. siguiente :
  44.  
  45. push 6 ;IPPROTO_TCP
  46. push 1 ;SOCK_STREAM
  47. push 2 ;AF_INET
  48. call [socket]
  49. ;Creamos un Identificador de Socket.
  50. cmp eax,-1
  51. jnz siguiente2
  52.  
  53. ;si hay un error Llamamos ala funcion
  54. ;FIND_ERROR
  55. call FIND_ERROR
  56.  
  57. siguiente2 :
  58. mov [sock],eax;Guardamos el Handle.
  59. mov eax,0 ;Limpiamos el Registro eax.
  60.  
  61. push host
  62. call [gethostbyname]
  63.  
  64. mov [conec],eax  ;guardamos el retorno de la funcion en
  65. ;la variable conec.
  66.  
  67. mov eax,0
  68. push [puerto]
  69. call [htons]
  70.  
  71. mov [cliente.sin_family],2 ;AF_INET
  72. mov [cliente.sin_port],ax
  73. mov eax,[conec]
  74. mov [cliente.sin_addr],eax
  75.  
  76. push 20
  77. push cliente
  78. push [sock]
  79. call[connect]
  80.  
  81. cmp eax,0
  82. jz funciona
  83.  
  84. call FIND_ERROR
  85.  
  86. ;Cerramos el proceso
  87. push 0
  88. call [ExitProcess]
  89.  
  90. .end start
  91.  
  92.  

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.


Título: Re: [problema] SOCKET EN FASM
Publicado por: bizco en 29 Marzo 2010, 09:25 am
la etiqueta funciona no existe, sales de un call con un jmp .... ¿quien saca de la pila la direccion de retorno?. Lee aqui (http://msdn.microsoft.com/en-us/library/ms738524%28VS.85%29.aspx). 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.