elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [Solucionado]Problema con API accept (WINSOCK)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado]Problema con API accept (WINSOCK)  (Leído 3,347 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
[Solucionado]Problema con API accept (WINSOCK)
« en: 12 Mayo 2013, 02:08 am »

Información API:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms737526(v=vs.85).aspx

Siguiendo con el estudio de WINSOCK estoy algo confundido con respecto a la API accept, ya que si pongo los parámetros:

Citar
 _Out_    struct sockaddr *addr,
  _Inout_  int *addrlen

LÍNEA 55: invoke accept,sock,addr acpt,sizeof acpt

Este me arroja un error:

Código
  1. TITLE  cliente
  2.  
  3. .386
  4. option casemap:none
  5. .model flat,stdcall
  6. include c:\masm32\include\windows.inc
  7. include c:\masm32\include\user32.inc
  8. include c:\masm32\include\kernel32.inc
  9. include c:\masm32\include\ws2_32.inc
  10.  
  11. includelib c:\masm32\lib\user32.lib
  12. includelib c:\masm32\lib\kernel32.lib
  13. includelib  c:\masm32\lib\ws2_32.lib
  14.  
  15. .const
  16.  
  17. .data
  18. wsadata WSADATA <>
  19. sin sockaddr_in <>
  20. acpt sockaddr <>
  21.  
  22. errort    byte "Error Server",0 ; temp
  23. error1    byte "Error WSAStartup",0 ; temp
  24. error2  byte "Error socket",0 ; temp
  25. error3  byte "Error listen",0 ; temp
  26. error4  byte "Error bind",0 ; temp
  27.  
  28. look  byte "Conexión recibida",0 ; temp
  29.  
  30. Port equ 61116
  31.  
  32. .data?
  33. sock SOCKET ?
  34.  
  35. .code
  36. main PROC
  37. invoke WSAStartup,101h,addr wsadata
  38. .if eax!=NULL
  39. invoke MessageBox,NULL,addr error1,addr errort,MB_ICONERROR + MB_OK ; temp
  40. .else
  41. invoke socket,AF_INET,SOCK_STREAM,0
  42.  
  43. .if eax!=INVALID_SOCKET
  44. mov sock,eax
  45. mov sin.sin_family,AF_INET
  46. mov sin.sin_addr,INADDR_ANY
  47. invoke htons,Port
  48. mov sin.sin_port,ax
  49.  
  50. invoke bind,sock,addr sin,sizeof sin
  51. .if eax!=SOCKET_ERROR
  52. invoke listen,sock,15
  53. .if eax!=SOCKET_ERROR
  54. .while(TRUE)
  55. invoke accept,sock,addr acpt,sizeof acpt
  56. .if eax!=SOCKET_ERROR
  57. invoke MessageBox,NULL,addr look,addr errort,MB_ICONERROR + MB_OK ; temp
  58. .else
  59. invoke WSAGetLastError
  60. .endif
  61. .endw
  62. .else
  63. invoke MessageBox,NULL,addr error3,addr errort,MB_ICONERROR + MB_OK ; temp
  64. .endif
  65. .else
  66. invoke MessageBox,NULL,addr error4,addr errort,MB_ICONERROR + MB_OK ; temp
  67. .endif
  68. .else
  69. invoke MessageBox,NULL,addr error2,addr errort,MB_ICONERROR + MB_OK ; temp
  70. .endif
  71. .endif
  72.  
  73.    invoke ExitProcess,0
  74. main ENDP
  75. END main

¿Cómo soluciono esto?
¿Para que sirve exactamente estos parámetros?

Gracias y saludos.

EDIT: El error generado al llamar accept es el siguiente:

271E (WSAEFAULT)   An invalid argument was supplied to the Windows Sockets API.


« Última modificación: 12 Mayo 2013, 18:56 pm por .:UND3R:. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Problema con API accept (WINSOCK)
« Respuesta #1 en: 12 Mayo 2013, 07:51 am »

Prueba cambiandolo por LÍNEA 55: invoke accept,sock,addr acpt,addr len (len seria un DWORD)

En la MSDN se especifica que es un puntero de entrada/salida de datos.

Sa1uDoS


En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Problema con API accept (WINSOCK)
« Respuesta #2 en: 12 Mayo 2013, 18:29 pm »

Hola

Como indica MSDN addrlen es un puntero que cuenta el tamaño de la estructura addr, como estas utilizando sockaddr_in son 16 bytes.

Ejemplo:

Código
  1. push 0x10
  2. mov edx, esp

La estructura se puede hacer igual.

Código
  1. push 0xbcee0200
  2. mov ecx, esp

Pero el error esta en addrlen como indica ese WSAEFAULT.

Un saludo.
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Solucionado]Problema con API accept (WINSOCK)
« Respuesta #3 en: 12 Mayo 2013, 18:56 pm »

Era lo que me comentaban, muchísimas gracias a ambos, saludos  :)
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines