Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: .:UND3R:. en 1 Septiembre 2012, 17:44 pm



Título: Problema con CreateThread
Publicado por: .:UND3R:. en 1 Septiembre 2012, 17:44 pm
Tengo lo siguiente:
Código
  1. CREATE_THREAD PROC
  2. INVOKE CreateThread,NULL,NULL,ADDR Thread,NULL,0,NULL
  3. ret
  4.  
  5. CREATE_THREAD ENDP
  6.  
  7. Thread PROC
  8. INVOKE CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
  9. cmp eax,NULL
  10. mov hdl_snap,eax
  11. mov inf_process.dwSize,128h
  12. INVOKE Process32First,[hdl_snap],ADDR inf_process
  13. cmp eax,TRUE
  14.  
  15. INVOKE Process32Next,[hdl_snap],ADDR inf_process
  16.  
  17.  
  18. ret
  19.  
  20. Thread ENDP

1) lpParameter [in, optional]
A pointer to a variable to be passed to the thread.

Qué parámetro introduzco para que no pase una variable al thread?, yo lo dejo con 0 pero me gustaría saber como si está bien.

2) Al intentar ensamblar esto me muestra el siguiente error:
Código:
error A2006: undefined symbol : Thread

¿Cómo soluciono esto?

Saludos


Título: Re: Problema con CreateThread
Publicado por: _Enko en 1 Septiembre 2012, 17:53 pm
No conozco el tema de las macros de masm, pero tranquilamente puedes ahorarte la molestia de usar macros.

Código:
Thread:
INVOKE CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
cmp eax,NULL
mov hdl_snap,eax
mov inf_process.dwSize,128h
INVOKE Process32First,[hdl_snap],ADDR inf_process
cmp eax,TRUE
 
INVOKE Process32Next,[hdl_snap],ADDR inf_process

ret
 

No se como es el tema del parametro, pero si pasa alguno, pudes solucionarlo haciendo al final un
retn 4, o add esp, 4


Título: Re: Problema con CreateThread
Publicado por: .:UND3R:. en 1 Septiembre 2012, 18:50 pm
Muchas gracias, pero aun así no logro solucionarlo, desconozco por que no reconoce ADDR NombredePROC

(parámetro 3).


Título: Re: Problema con CreateThread
Publicado por: Arkangel_0x7C5 en 1 Septiembre 2012, 20:15 pm
pues porque no declaraste el prototipo con PROTO

Saludos


Título: Re: Problema con CreateThread
Publicado por: .:UND3R:. en 2 Septiembre 2012, 02:11 am
pues porque no declaraste el prototipo con PROTO

Saludos

Se ha declarado el prototipo.


Título: Re: Problema con CreateThread
Publicado por: Arkangel_0x7C5 en 2 Septiembre 2012, 13:57 pm
pues cambia el orden de las funciones y pon:
Código
  1.  
  2. push NULL
  3. push NULL
  4. push NULL
  5. push offset Thread
  6. push NULL
  7. push NULL
  8. call CreateThread
  9.  

espero que se solucione

Saludos


Título: Re: Problema con CreateThread
Publicado por: fary en 3 Septiembre 2012, 14:08 pm
No hace falta poner ADDR ni offset

Código
  1. invoke CreateThread,0,0,Funcion,0,0,0

saludos.


Título: Re: Problema con CreateThread
Publicado por: .:UND3R:. en 4 Septiembre 2012, 03:04 am
No hace falta poner ADDR ni offset

Código
  1. invoke CreateThread,0,0,Funcion,0,0,0

saludos.

También lo intenté de esa forma pero no función, la solución fue llamarlo sin utilizar la directiva INVOKE, es decir:

Código
  1. push 0
  2. push 0
  3. push 0
  4. push OFFSET SEARCH_CHEAT
  5. push 0
  6. push 0
  7. call CreateThread

Saludos y muchas gracias por su ayuda  ;-)


Título: Re: Problema con CreateThread
Publicado por: Иōҳ en 4 Septiembre 2012, 05:05 am
Lo que dice Arkangel es cierto, es por eso el error Under, que tipo de versión de masm estás usando ¿?.

Saludos,
Nox.


Título: Re: Problema con CreateThread
Publicado por: zu-zu en 4 Septiembre 2012, 23:05 pm
Imagino que estás usando una versión vieja de MASM. El problema es que en esa versión defines la función después del código que hace referencia a ella. La solución es cambiar el orden de las funciones, aunque sería mejor que uses una versión más actualizada de MASM o en su defecto uses otro ensamblador que soporte su sintaxis.


Título: Re: Problema con CreateThread
Publicado por: .:UND3R:. en 5 Septiembre 2012, 00:42 am
utilizo MASM32 (su última versión) junto con el IDE RadASM, nunca tuve problemas con los INVOKES, solo con CreateThread, de todas maneras ya se ha solucionado, gracias por sus comentarios. Saludos