Páginas: [1]
|
 |
|
Autor
|
Tema: Variables locales (Leído 231 veces)
|
SheKeL_C$
Conectado
Mensajes: 455
_-=[Sh3K3L_C$]=-_
|
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 quedarmeEste es mi nuevo Blog
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.144
|
pq declaras aa como word? yo no uso masm no se como esta ese tema.
|
|
|
|
|
En línea
|
|
|
|
Eternal Idol N&P
Desconectado
Mensajes: 1.276
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
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
|
be closely tied to (v.) = estar estrechamente ligado a Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.
"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
|
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 
|
|
|
|
|
En línea
|
|
|
|
Eternal Idol N&P
Desconectado
Mensajes: 1.276
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
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
|
be closely tied to (v.) = estar estrechamente ligado a Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.
"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$
Conectado
Mensajes: 455
_-=[Sh3K3L_C$]=-_
|
Entonces como deberia de quedar  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 quedarmeEste es mi nuevo Blog
|
|
|
|
E0N
|
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  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]
|
|
|
|