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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Error de acceso a memoria (no trabajo con memoria :S)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error de acceso a memoria (no trabajo con memoria :S)  (Leído 3,611 veces)
SERBice


Desconectado Desconectado

Mensajes: 934



Ver Perfil WWW
Error de acceso a memoria (no trabajo con memoria :S)
« en: 17 Junio 2008, 10:43 am »

Recibo el siguiente mensaje (aveces, no siempre) cuando ejecuto mi aplicacion (hecha en vb6 obviamente):




He localizado el posible origen del problema, pero aun no me explico porque sucede ni como solucionarlo.

La aplicacion crea un thread llamando a una funcion determinada que a su vez llama a la API URLDownloadToFile, descarga un archivo, analiza el contnido del archvo y ejecuta x accion segun el resultado del analisis.

En teoria no deberia corromper la memoria ni arrojar ningun error. He implementado una variable publica que es usada para prevenir la creacion de dos thread simultaneos (dado que el id del thread se almacena en una variable y si se ejecutara un segundo thread sobreescribiria el id dl primero y "se perderia" su id, no permitiendo matarlo luego)

Al finalizar la aplicacion el thread es matado en caso ed qeu siga en ejecucion. Pero repito, el problema paerce darse al crearse el thread por primera vez (cuando se ejecuta la aplicacion se lanza tl thread y luego se hace ciclicamente con un timer, comprueba informacion disponible en un sitio web).

Notese que el error no es siemper, sino aveces, quizas sea bajo ciertas condiciones del entorno que no suelen darse, pero cuando se dan... chau aplicacion. Otra cosa curiosa es que la aplicacion sigue funcionando bien, si no se acepta el msgbox de error la app sigue corriendo bien, solo se cuelga el thread.

¿Alguien sabe a que se debe y/o como solucionarlo?.

PD: me es necesario usar el thread para no "colgar" la aplicacion por unos instantes (aveces variso segundos dependiendod e la conexion), ddo qu la api URLDownloadToFile "se cuelga" hasta terminar la descarga, utilizando un thread la aplicacion sigue sin notarse ningun cuelgue. No uso winsock por una cuestion de compatibilidad con los SO y simpleza en la aplicacion (podria usar winsock por api pro es mucho codigo para un simple checkeo, y el inet control no me termina de convencer).


Desde ya muchas gracias.


« Última modificación: 17 Junio 2008, 10:45 am por SERBice » En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #1 en: 19 Junio 2008, 15:09 pm »

Pues adivinos no somos, pega un trozo del código donde te da el error (usa el debugger). Aunque el fallo tiene toda la pinta de ser por que creas mal el hilo, fíjate que intentas acceder a la posición 0x000.. y ahí no hay nunca nada :P

Debuggea para ver si el hilo se crea o no. Yo creo que va a ser eso, pero sin ver código imposible saberlo...

Salu2


En línea

SERBice


Desconectado Desconectado

Mensajes: 934



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #2 en: 19 Junio 2008, 18:35 pm »

a ver... no intento acceder a ninguna posicion de memoria, ahi esta el problema.

simplement creo un thread que dscarga un archivo usando api, y arroja ese error (no siempre, esto es lo más curioso).

el thread es creado de la unica forma posible, no hay buena o mala, solo hay una:
Código
  1.        hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AsyncThread, ByVal 0&, ByVal 0&, hThreadID)
  2.  

donde AsyncThread es la funcion qu descarga el archivo en cuestion usando la API URLDownloadToFile


Código
  1. Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
  2. "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
  3. szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
  4.  


es por esto que posteo preguntando, porque no hay forma de que yo este tratandod e acceder a memoria, mucho menos  una posicion invalida (0x0 es una posicion del sistema)... asi qeu no cmoprendo, este error me tiene algo loco.... no dberia estar allí.
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #3 en: 19 Junio 2008, 18:44 pm »

visual basic no esta diseñado para ser MultiThread, se pueden usar pero dan muchisimos problemas
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #4 en: 19 Junio 2008, 18:57 pm »

Citar
a ver... no intento acceder a ninguna posicion de memoria, ahi esta el problema.

simplement creo un thread que dscarga un archivo usando api, y arroja ese error

Cualquier programa accede constantemente a posiciones de memoria, y el tuyo no es una excepción, además por el propio funcionamiento de CreateThread tienes que acceder a la posición de memoria de hThreadID, de ahí que tenga que ser un puntero, pero claro en Vb...

Prueba esto, dale a hThreadID el valor 5 antes de llamar al api (hThreadID = 5) y luego ejecútalo, a ver que valor hexadecimal te sale en el mensaje de error... (si subieras un poco de code no tendríamos que andar con estas..)

Citar
donde AsyncThread es la funcion

Una función o un sub? como lo tienes declarado??

De todas formas los hilos en VB6 siempre te van a dar problemas...
Salu2
En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #5 en: 19 Junio 2008, 19:18 pm »

Podrias implementar IBindStatusCallback para que no se congele, pero no tiene mucho sentido.

En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
SERBice


Desconectado Desconectado

Mensajes: 934



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #6 en: 21 Junio 2008, 00:41 am »

AsyncThread es una Sub publica.
Citar
Public Sub AsyncThread()


Lo que me resulta llamativo es que el programa crea 2 threads, y solo este me da problemas, ahroa estoy mirando en el codigo a ver si hay algo diferente entre ambos.


EDIT:

Citar
si subieras un poco de code no tendríamos que andar con estas.

es una simple creación de un thread que llama a una sub que usa una api la cual ya he dicho, cualqueira puede reproducir el error con un poco  ganas.... no se porque la insistencia con el code ¬¬


estableciendo hthreadid en 5 da el mismo error.


cobein, como es eso de usar IBindStatusCallback  ???

ah, y un OT para cobein jeje.... has hecho algo sobre el tema de ocultar un exe dentro de otro e inyectarlo desde un byte array????.... me interesa mucho jeje

EDIT2: He usado como base para la creación del thread un ejemplo del apiguide

EDIT3: Dato importante, el error hasta ahora solo lo he visto en Windows XP con SP2, probe en Win98 SE y no arroja errores (raro, porque Win98 es muy "quisquilloso" con la memoria).

Dentro de unas horas probate con XP SP3, y Vista Ultimate (sin SP)

EDIT4: al parcer el error solo ocurre cuando se llama por primera vezal thread desde el form-load, luego no ocurre cuando es llamado por un timr que ejecuta el thread cada x minutos. el error no sale siempre, solo aveces cuando se ejecuta la aplicacion. Si no se acepta (ni cancela) el error del thread la aplicacion continua funcionando hasta qeu se cierre el mnsaje del error que genero el thread.... algo raro.
« Última modificación: 21 Junio 2008, 05:49 am por SERBice » En línea

SERBice


Desconectado Desconectado

Mensajes: 934



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #7 en: 21 Junio 2008, 13:03 pm »

bueno, lo he "solucionado".... el error se producia/produce al llamar/crear el thread desde el form_load... aun no me explico que  podria llegar a estar interfiriendo..... pero bueno, he dejado de llamar/crear al thread desde el form_load y ahora solo lo hago con el timer. Hasta ahora n hay ningun problema.

Agradezco a todos su colaboracion y si alguin supiera el porque de este error desacbellado seria bueno que lo comparte, solo como una curiosidad y dato a futuro dado qeu ya lo he "solucionado"... aunqu en realidad no es una solucion, sino una omision de su origen :p.....


nuevamente muchas gracias.

saludos.
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Error de acceso a memoria (no trabajo con memoria :S)
« Respuesta #8 en: 21 Junio 2008, 13:56 pm »

mirate esto

http://www.freevbcode.com/ShowCode.Asp?ID=4029
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
memoria (espacio de trabajo privado)
Windows
retsam07 2 4,497 Último mensaje 2 Mayo 2013, 20:52 pm
por Saberuneko
se ha producido una violacion de acceso a memoria dev c++
Programación C/C++
loadenro 8 3,919 Último mensaje 29 Abril 2014, 05:46 am
por loadenro
[SOLUCIONADO] Acceso a dirección de memoria con pointers en varios niveles
Programación C/C++
panax 9 2,693 Último mensaje 6 Mayo 2014, 17:00 pm
por Mad Antrax
Que micro y memoria necesito para este trabajo?
Hardware
Martin512 3 1,202 Último mensaje 13 Junio 2014, 21:11 pm
por Martin512
Acceso a memoria de otros procesos.
Windows
marax 8 2,109 Último mensaje 26 Septiembre 2020, 17:19 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines