Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: E.P.I. en 21 Marzo 2010, 13:07 pm



Título: Agregar memoria HeapAlloc()
Publicado por: E.P.I. en 21 Marzo 2010, 13:07 pm
Hola,

respeto a la solución que me dijo Hacker_Zero, en el anterior post, ahora quiero agregarle memoria con HeapAlloc(), el caso es que lo he porbado con esta forma, pero no me va:

Código
  1. invoke HeapAlloc,GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PATH

¿Porque?

Gracias.


Título: Re: Agregar memoria HeapAlloc()
Publicado por: Eternal Idol en 21 Marzo 2010, 14:01 pm
¿GetProcessHeap()? Te recomiendo que compres un libro de ensamblador asi comprendes que estas haciendo.


Título: Re: Agregar memoria HeapAlloc()
Publicado por: E.P.I. en 21 Marzo 2010, 19:33 pm
¿GetProcessHeap()? Te recomiendo que compres un libro de ensamblador asi comprendes que estas haciendo.

Sí, GetProcessHeap()... en C, sería:

Código
  1. LPCSTR a = (LPCSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PATH);
  2.  
  3. //o
  4.  
  5. HANDLE hHeapProcess = GetProcessHeap();
  6. LPCSTR a = (LPCSTR)HeapAlloc(hHeapProcess,HEAP_ZERO_MEMORY,MAX_PATH);

No me puedes decir cómo es en ASM?... así cojo un referente para las demás API's y me voy enterando...

Saludos  ;)

EDITO: con esto:

Código
  1. invoke HeapProcess <invoke GetProcessHeap>,HEAP_ZERO_MEMORY,MAX_PATH  

Pero está mal... bueno es bueno llegar a conclusiones (con ayuda jeje  :xD)...


Título: Re: Agregar memoria HeapAlloc()
Publicado por: Eternal Idol en 21 Marzo 2010, 20:57 pm
El problema es que no sabes que hace invoke que no es una instruccion del microprocesador sino una directiva del ensamblador (http://msdn.microsoft.com/en-us/library/9kkd4k7y(VS.80).aspx).

Código
  1. invoke GetProcessHeap
  2. invoke HeapAlloc, eax, HEAP_ZERO_MEMORY, MAX_PATH

Código
  1. call GetProcessHeap
  2. push MAX_PATH
  3. push HEAP_ZERO_MEMORY
  4. push eax
  5. call HeapAlloc


Título: Re: Agregar memoria HeapAlloc()
Publicado por: E.P.I. en 21 Marzo 2010, 21:08 pm
Sí, bueno ya lo ví (en el link de offtopic)... gracias. ¿El código te ha salido en dos, o son el mismo?

[offtopic]
Acá (http://foros.solocodigo.com/viewtopic.php?t=9171), me encanta la discusión... y tu descripción de invoke...  :xD

[/offtopic]

PD: perdona, por hacer el ridículo... es que no llevo ni un dia con ASM, y quiero ir rapidísimo, ya me aprendo las definiciones, ...

EDITO: invoke, es standard con todos los Win?


Título: Re: Agregar memoria HeapAlloc()
Publicado por: 08l00D en 21 Marzo 2010, 21:16 pm
Si recien estas empezando yo te recomiendo que no te metas con esas boludeces de invoke y eso, que a la larga te van a joder... aprende como se llama a funciones desde ensamblador, aprende(si no sabes, acerca de las calling convention.) y despues enredate con invoke y toda esa basura...

pd: invoke es una directiva pero de masm, en fasm me parece que es una macro... en fin implementaciones innecesarias para mi...
De buena onda te digo, trata de leer un libro para aprender ensamblador, los foros para mi son mas como una ayudita extra.. por eso lee, trata de digerir y despues veni  :xD


Título: Re: Agregar memoria HeapAlloc()
Publicado por: E.P.I. en 21 Marzo 2010, 21:18 pm
Si recien estas empezando yo te recomiendo que no te metas con esas boludeces de invoke y eso, que a la larga te van a joder... aprende como se llama a funciones desde ensamblador, aprende(si no sabes, acerca de las calling convention.) y despues enredate con invoke y toda esa basura...

pd: invoke es una directiva pero de masm, en fasm me parece que es una macro... en fin implementaciones innecesarias para mi...
De buena onda te digo, trata de leer un libro para aprender ensamblador, los foros para mi son mas como una ayudita extra.. por eso lee, trata de digerir y despues veni  :xD

Exacto! Es que no terminaba de entender invoke... usaré call(?)


Título: Re: Agregar memoria HeapAlloc()
Publicado por: Eternal Idol en 21 Marzo 2010, 21:19 pm
Si, es lo mismo, primero te puse el codigo con invoke y abajo su equivalente en instrucciones del microprocesador.

Ir rapidisimo es una mala idea, no se puede correr sin saber caminar, primero tenes que aprender a gatear.

Si lo que buscas es una relacion con  C/C++ no hay nada standard en assembly y el codigo no es portable. invoke estara o no disponible dependiendo del ensamblador que uses.


Título: Re: Agregar memoria HeapAlloc()
Publicado por: E.P.I. en 21 Marzo 2010, 21:24 pm
Si, es lo mismo, primero te puse el codigo con invoke y abajo su equivalente en instrucciones del microprocesador.

Ir rapidisimo es una mala idea, no se puede correr sin saber caminar, primero tenes que aprender a gatear.

Si lo que buscas es una relacion con  C/C++ no hay nada standard en assembly y el codigo no es portable. invoke estara o no disponible dependiendo del ensamblador que uses.

Ok! Mejor, como ha dicho 08|L00D, me estudio primero las instrucciones. No es que quiera correr, me he rectificado en la última frase, perdón si no se ha notado...

PD: utilizo FASM, pero primero a las instrucciones!