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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [Problema] De buffer a variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Problema] De buffer a variable  (Leído 6,299 veces)
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
[Problema] De buffer a variable
« en: 10 Julio 2009, 18:50 pm »

Hola hola :D

Estoy programando en ASM y me he encontrado con un pequeño problema que no he sabido como arreglar.
Supongamos que declaro un buffer:
Código
  1. Nombre rb 100
y al usar una API, ese buffer se llena pero no del todo. ¿Hay algún modo de "pasar" esa parte llenada a una variable directamente?


En línea

Crack the bytes, crack yourself
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #1 en: 10 Julio 2009, 21:45 pm »

----
Supongamos que declaro un buffer:
Código

Nombre rb 100

y al usar una API, ese buffer se llena pero no del todo. ¿Hay algún modo de "pasar" esa parte llenada a una variable directamente?
-----------

Haber si te explicas un poco mejor , tienes el buffer lleno y quieres "baciarlo" y copiarlo a otra variable?? Es eso

Es fácil , primero debes de saber que no se puede copiar de memoria a memoria (hasta donde se!) , primero debes de copiar un byte a cualquier registro del CPU con la capacidad de un byte , ejemplo AH o AL que pertenecen a EAX , después copias lo que tienes en estos registros hacia el espacio en memoria de la variable que esta "vacia" , al mismo tiempo tenes que comprobar si has llegado al fin del buffer , ej comprobando que los bytes que estas copiando son 00 hexa , en el caso que estés trabajando con strings que por ley terminan en 00 , si no estas trabajando con strings tienes que copiar lo que se encuentre dentro de un rango determinado , ej el tamaño de el Buffer e ir restando con cada operación de copia que hagas hasta llegar a 0 que es el fin del buffer.

SAludos










En línea



http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #2 en: 10 Julio 2009, 22:07 pm »

No me has entendido :-[

Yo declaro un buffer de 100 bytes para poder usarlo en una API, y al usar esa API el buffer se llena solo 30 bytes (dejando 70 bytes libres). ¿Como puedo copiar esos 30 bytes en una variable? Supongo que mediante RtlMoveMemory se puede, pero yo me refiero a hacerlo directamente... mediante registros o movs.
En línea

Crack the bytes, crack yourself
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [Problema] De buffer a variable
« Respuesta #3 en: 10 Julio 2009, 22:11 pm »

Nose bien lo que quieres hacer pero mas o menos por lo que entendi  te hice un codigo :P

Código
  1. include 'win32ax.inc'
  2. .data
  3. lBuffer rb 100
  4. .code
  5. start:
  6.     invoke GetLogicalDriveStrings,100,lBuffer
  7.     invoke lstrlenW,lBuffer
  8.     mov ebx,2
  9.     mul ebx
  10.     mov ebx,eax
  11.     inc ebx
  12.    invoke GlobalAlloc ,GPTR, ebx       ;Creamos otro buffer
  13.    mov edi,eax ; Guardamos el buffer en edi
  14.    stdcall cRtlMoveMemory,eax,lBuffer,ebx     ;Copiamos lo que se encuentra en lBuffer a el buffer generado por GlobalAlloc
  15.    stdcall Zerar,lBuffer,ebx;Vaciamos el lBuffer
  16.      invoke MessageBox,0,edi,0,0
  17.        invoke MessageBox,0,lBuffer,0,0
  18.    invoke ExitProcess,0
  19.      ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory
  20. ; by YST
  21. proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad
  22. push esi edi
  23. xchg edi,[cBuffer]
  24. xchg esi,[Cpuntero]
  25. .bucleb:
  26. dec [cCantidad]
  27. movsb
  28. cmp  [cCantidad],0
  29. jge .bucleb
  30. pop edi esi
  31. ret
  32. endp
  33.  
  34. proc Zerar,Puntero,Cantidad
  35.  
  36.    push ecx
  37.    push ebx
  38.  
  39.              mov ecx,[Cantidad]
  40.                 mov ebx,[Puntero]
  41.                .bucle:
  42.  
  43.                mov byte[ebx+ecx],0
  44.                loop .bucle
  45.                mov byte[ebx],0
  46.                pop ebx
  47.                pop ecx
  48.                ret
  49. endp
  50. .end start
En línea



Yo le enseñe a Kayser a usar objetos en ASM
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #4 en: 11 Julio 2009, 03:18 am »

quieres copiar de un buffer a otro? si es asi puedes mover la direccion del origen en esi y la del destino en edi y utilizar movsb (para bytes), movsw (para words), movsd( dwords) y si tienes un procesador de 64 , movsq(para qwords). junto con el prefijo rep

En línea

Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #5 en: 12 Julio 2009, 20:38 pm »

El problema ya lo solucioné. Gracias a todos :P
Ahora me he topado con otro problema. ¿Alguien podria ponerme un ejemplo de como darle un valor de salida a un parametro en una función?

Ejemplo:
Código
  1. proc DirectorioDeWindows, Ruta
  2. mov [Ruta], 'C:\Windows'
  3. ret
  4. endp
Se que el code está mal, es para que os hagais una idea.
En línea

Crack the bytes, crack yourself
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #6 en: 12 Julio 2009, 20:56 pm »

guarda en el parametro la direccion de una variable, y dentro de la funcion usas el parametro como puntero
En línea

Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #7 en: 12 Julio 2009, 21:44 pm »

x0ʎu he hecho lo que dices pero sigue habiendo un pequeño problema. Dentro de la función si le doy un valor al parametro funciona todo correctamente, pero al hacer lo siguiente fuera de la función
Código
  1. stdcall Funcion, Parametro
  2. mov eax, Parametro
el Parametro está vacio. No se si me entiendes :-\
Dentro de la función todo bien pero al utilizarla desde fuera no funciona.
En línea

Crack the bytes, crack yourself
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: [Problema] De buffer a variable
« Respuesta #8 en: 12 Julio 2009, 21:56 pm »

ponme el trozo de codigo que te da problemas, para que entienda mejor  ;)
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [Problema] De buffer a variable
« Respuesta #9 en: 12 Julio 2009, 23:42 pm »

Por cierto en que estas ensamblando en masm o fasm ?

Por que si es fasm seria

mov eax,[Parametro] y en masm no me acuerdo :xD
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema variable j
Programación C/C++
Ander123 6 2,076 Último mensaje 28 Octubre 2012, 12:57 pm
por DickGumshoe
Problema con el Buffer de memoria de php.
PHP
yoelrodguez 1 1,088 Último mensaje 19 Diciembre 2015, 08:44 am
por _Zume
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines