Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: ny0x en 12 Mayo 2009, 19:44 pm



Título: [Ayuda]con punteros en asm
Publicado por: ny0x en 12 Mayo 2009, 19:44 pm
Hola a todos quiero aprender a programar en asm, porque he oido que es el lenguaje mas rapido que hay, y tambien estoy enterado de todas sus desventajas. Pero bueno mi duda es esta como puedo usar punteros en asm.
Ya se que es un poco pronto porque estoy empezando. Pero esto de practicar mientras aprendo me ha servido, antes mi idea es hacer una funcion para sacar la longitud de una cadena usando el caracter nulo. Para esto necesito hacer un puntero que apunte al principio de una cadena para irlo incrementndo pero no se nada estoy en cero. Bueno se lo basico como los registros, algunas instrucciones pero hasta ahi nada mas.
No estoy pidiendo que me den una funcion hecha sino que me guien a como la puedo hacer yo.

gracias


Título: Re: [Ayuda]con punteros en asm
Publicado por: Arkangel_0x7C5 en 12 Mayo 2009, 19:58 pm
para usarlos, lo metes en un registro y lo usas asi: mov eax, [ebx]
Donde los [] son para decirle que acceda a la dirección de memoria que hay en el registro.

Para saberla direccion de una variable gloval. puedes usar offset en masm y lea.
Si es una variable local, puedes usar lea tambien.

Saludos


Título: Re: [Ayuda]con punteros en asm
Publicado por: ny0x en 12 Mayo 2009, 20:31 pm
Hola graicas por responder, intente hacer un code pero me surgen unas dudas, el lea solo me funciona dentro de main y no dentro len, bueno si compila pero se supone que debe mostrar holamundo pero no muestra nada (un messagebox vacio), y creo que a eso se deba que tarde tanto en salir de la funcion, los messagebox los puse para poder llevar un seguimiento de las variables.

Código
  1. include 'c:\fasm\include\win32ax.inc'
  2. entry main
  3. section '.code' code readable executable
  4. main:
  5.  
  6. invoke MessageBoxA,0,Hello,0,0
  7. push Hello
  8. call len
  9. invoke MessageBoxA,0,0,0,0
  10. mov eax,0
  11. ret
  12.  
  13. proc len,cad
  14. lea edx,[cad]
  15. invoke MessageBoxA,0,edx,edx,0
  16. mov ecx,0
  17. buc:
  18. cmp edx,0
  19. je salir
  20. inc edx
  21. inc ecx
  22. jmp buc
  23. salir:
  24. mov eax,ecx
  25. ret
  26. endp
  27.  
  28.  
  29.  
  30. section '.data' data readable writeable
  31.        Hello     db   'holamundo',0
  32.        var       rb   256
  33. section '.idata' import data readable
  34. library u32,'user32.dll'
  35. import u32,MessageBoxA,'MessageBoxA'

ayuda, ya se que puede ser desesperante explicarle algo a quien no entiende mucho sobre el tema, pero por favor sean pacientes por cierto uso fasm, lo de offset es tambien valido para fasm?

gracias


Título: Re: [Ayuda]con punteros en asm
Publicado por: bizco en 12 Mayo 2009, 21:16 pm
Citar
invoke MessageBoxA,0,eax,0,0
mov ecx,0
buc:
cmp eax,0
je salir
inc eax
jmp buc
salir:

¿que intentas aqui?. la salida de MessageBox es 1 y comparas eax con 0 y la condicion es que ¿incrementas hasta que eax sea 0? la verdad no es por desanimarte pero tio usa la logica, intenta tener una base mas solida y luego empezamos con los demas temas.


Título: Re: [Ayuda]con punteros en asm
Publicado por: ny0x en 12 Mayo 2009, 21:45 pm
error de principiante, vengo de c y no estoy acostumbrado a que el valor de retorno se devuelva en un lugar especifico. No me habia dado cuenta, parece ser que lo que yo puse segun para comprobar que el code iba bien me lo echo a perder ;D.
Y nadie puede desanimarme (creo  :rolleyes:) , si yo me propongo algo lo logro aunque me cueste la cordura.
Cuando empece con c estaba peor, no sabia ni que era una variable  :P

P.D Gracias por contestar