elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
11 Octubre 2008, 04:41  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Hendrix, E0N)
| | |-+  Variables locales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Variables locales  (Leído 257 veces)
SheKeL_C$

Desconectado Desconectado

Mensajes: 461


_-=[Sh3K3L_C$]=-_


Ver Perfil
Variables locales
« en: 02 Abril 2008, 15:48 »

Estoy utilizando MASM y no entiendo muy bien el tema de las variables
locales...
Teniendo esto me da error

                LOCAL aa :WORD

                invoke lstrcpy, addr aa, txt("hola")
                invoke MessageBox, NULL,addr aa, addr aa,MB_OK

                invoke lstrcat, addr aa, txt(" HOLA")
                invoke MessageBox, NULL,addr aa, addr aa,MB_OK
                ret

Lo que yo quiero es tener varias variables locales llenas de string y
poder modificarlas con lstrcat, lstrcpy .... etc
En línea

En un momento complicado de mi vida quise suicidarme y cinco minutos despues quise quedarme

Peliculas en mp4 para el ipod/iphone/psp
®®
Colaborador

Desconectado Desconectado

Mensajes: 5.267


Ver Perfil
Re: Variables locales
« Respuesta #1 en: 02 Abril 2008, 17:48 »

pq declaras aa como word? yo no uso masm no se como esta ese tema.
En línea
Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.345


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: Variables locales
« Respuesta #2 en: 02 Abril 2008, 17:55 »

Es normal que te de una excepcion ya que estas modificando la direccion de retorno sin querer (con lstrcat). Las variables locales - tal como en C/C++ - estan en la pila, ahi estas reservando una de 2 bytes (un WORD) y le queres copiar una cadena - de mayor tamaño - encima. Las cadenas no se suelen poner en pila, ocupan mucho espacio y la pila no es infinita ni mucho menos, es preferible usar memoria dinamica.
« Última modificación: 02 Abril 2008, 17:58 por Eternal Idol » En línea

http://www.nacionalypopular.com/
http://www.lucheyvuelve.com.ar/

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.682



Ver Perfil WWW
Re: Variables locales
« Respuesta #3 en: 02 Abril 2008, 18:15 »

Utiliza el api LocalAlloc para reservarte un poco de memoria y ya manejas el puntero, eso da problemas de stack overflow verad ®®? jajaajaja

Lo q pasa es q en la pila reservas 2 bytes y escribes 4, sobreescribiendo la dirección de retorno q ha sido pusheada anteriormente por el call, asi q el programa intenta regresar a un sitio q no debe :P
En línea
Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.345


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: Variables locales
« Respuesta #4 en: 02 Abril 2008, 18:24 »

En realidad son 8 9 bytes los escritos, los cuatro primeros no harian daño ya que MASM los reservo y mejor usa el Heap (HeapAlloc) ya que Local/Global es algo obsoleto.
« Última modificación: 02 Abril 2008, 18:30 por Eternal Idol » En línea

http://www.nacionalypopular.com/
http://www.lucheyvuelve.com.ar/

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
SheKeL_C$

Desconectado Desconectado

Mensajes: 461


_-=[Sh3K3L_C$]=-_


Ver Perfil
Re: Variables locales
« Respuesta #5 en: 02 Abril 2008, 20:31 »

Entonces como deberia de quedar :-X :-X

He visto el porque, y lo que debo de utilizar.. pero alguien puede poner ese codigo para que funcione?
En línea

En un momento complicado de mi vida quise suicidarme y cinco minutos despues quise quedarme

Peliculas en mp4 para el ipod/iphone/psp
E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.682



Ver Perfil WWW
Re: Variables locales
« Respuesta #6 en: 02 Abril 2008, 20:47 »

Yo uso fasm, asi q en fasm te lo dejo, es una función que obtiene nuestra propia ruta y lo hace sin petar por muy larga q sea ;)

Código
include 'H:\archivos de programa\fasm\include\win32ax.inc'
 
.code
start:
 
    call ObtenerRuta
    invoke MessageBox,  0, ebx, 'La ruta es', 0   ; Mostramos la ruta
    invoke LocalFree, ebx  ; Liberamos memoria
 
    invoke ExitProcess, 0
 
proc ObtenerRuta
    local MiRuta : DWORD
 
    invoke LocalAlloc, LPTR, 255 ; Reservamos 255 bytesde memoria dinamica el api nos devuelve
    mov [MiRuta], eax            ; en eax el PUNTERO a esos bytes y lo guardamos en MiRuta.
 
    invoke GetModuleFileName, 0, [MiRuta], 255
 
    mov ebx, [MiRuta] ; Devolvemos en ebx la ruta
    ret
endp
 
.end start


Como puedes ver en la pila solo reservamos un dword (4bytes) es decir en la variable local, q transformamos en un puntero a un trozo de memoria de 255bytes. Reservar 255bytes directamente en la pila sería un poco de locos, aparte de ser bastante propicio a vulnerabilidades

Salu2

En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats