Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Avoidance25 en 10 Noviembre 2009, 17:59 pm



Título: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: Avoidance25 en 10 Noviembre 2009, 17:59 pm
Lo que quiero hacer es una funcion que me trabaje sobre 3 cadenas de texto, y que se le den las direcciones de memoria en las que comienzan las cadenas como argumentos.

Algo asi:
Código
  1. ;void MiFuncion(char *string1, char *string2, char *string3);
  2. proc MiFuncion  string1, string2, string3
  3.  
  4.        ret
  5. endp

Ahora, lo que NO quiero es tener que guardar estas direcciones de memoria en eax para acceder a la memoria, ya que tendria que estar rotando las 3 cadenas por eax.
¿Hay alguna forma de acceder a la direccion de memoria a la que apunta el contenido de una variable?. Tenia entendido que esto se puede lograr si no se usan los [], pero probe de muchisimas maneras y no me funciono :(


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: YST en 10 Noviembre 2009, 18:24 pm
Existen mas registros que eax , puedes mover una a ebx otra a edi y otra a esi :P


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: [L]ord [R]NA en 10 Noviembre 2009, 19:29 pm
Antes que todo... estas seguro que sabes programar en ASM, te recomiendo que leas sobre los registros y sobre el Stack


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: MCKSys Argentina en 10 Noviembre 2009, 21:46 pm
Pues EAX es el registro mas usado... :rolleyes:

Puedes intentarlo con ECX ó EDX ó el que mas te guste (trata de no tocar EIP  ;D)

Ahora, cuando salgas con algo como: "no quiero usar el stack", ahi si... cambia de lenguaje  :xD

Saludos!


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: Avoidance25 en 10 Noviembre 2009, 22:37 pm
Existen mas registros que eax , puedes mover una a ebx otra a edi y otra a esi :P
Ahhh, muchas gracias, voy a hacerlo de esa manera. Solo es que pensaba que se podia acceder directamente.....

Antes que todo... estas seguro que sabes programar en ASM, te recomiendo que leas sobre los registros y sobre el Stack
Pues obviamente estoy aprendiendo, si lo supiera todo no estaria preguntando.

Puedes intentarlo con ECX ó EDX ó el que mas te guste (trata de no tocar EIP  ;D)
Ya entendi este punto con el mensaje de YST, grax.

Ahora, cuando salgas con algo como: "no quiero usar el stack", ahi si... cambia de lenguaje  :xD
¿Que tiene de malo ASM?. De todas formas no pienso hacer todo el programa en ASM, solo la parte que de otra forma tardaria mucho tiempo en ejecutarse.




Pero la gran p***, se que la pregunta es de un principiante, pues en ASM eso soy, pero no es necesario que respondan de manera negativa. Todos fueron principiantes alguna vez, no?


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: MCKSys Argentina en 11 Noviembre 2009, 01:27 am
El tema no es la pregunta, sinó el tipo de pregunta.

¿ Porqué no quieres usar EAX ?  :huh:

Eso no tiene lógica... Por eso las respuestas. ;D

Saludos!




Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: Eternal Idol en 11 Noviembre 2009, 01:37 am
El tema no es la pregunta, sinó el tipo de pregunta.

¿ Porqué no quieres usar EAX ?  :huh:

Eso no tiene lógica... Por eso las respuestas. ;D

Es que hay que leer el hilo completo no solo el titulo  ;)


Título: Re: ¿Como puedo acceder a direcciones de memoria sin usar eax?
Publicado por: Avoidance25 en 11 Noviembre 2009, 15:43 pm
El tema no es la pregunta, sinó el tipo de pregunta.

¿ Porqué no quieres usar EAX ?  :huh:

Eso no tiene lógica... Por eso las respuestas. ;D

Saludos!
No quiero usar eax porque necesito manejar 3 punteros de memoria. Sobre todo hice esta pregunta porque pensaba que se podia acceder a la memoria directamente, de hecho, creo que utilizaba variables de esta manera antes (hace mucho tiempo usaba ASM de 16 bits, y no volvi a tocar ASM hasta hace unos pocos dias).

Y se que puedo ir rotando, pero si hago el programa (o esta parte del programa al menos) en ASM es porque necesito que sea rapido, y si hay una forma de acceder directamente a estas direcciones de memoria me viene perfecto.



En fin, si no se puede hacer de esta manera voy a usar eax, ebx y edx.