Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: daryo en 2 Agosto 2014, 23:35 pm



Título: [masm][pregunta]problema con variables
Publicado por: daryo en 2 Agosto 2014, 23:35 pm
hola estoy leyendo un libro de masm y dentro de los codigos de ejemplo hay uno que no me funciona:

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. assume fs:nothing
  5.  
  6. .code
  7. mivariable dd  0
  8. codigo:
  9. mov   [offset mivariable], eax
  10. retn
  11. nuevo dd ?
  12.  
  13. end codigo
  14.  

el error es :
Citar
error A2001: immediate operand not allowed

asi me funciona:

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. assume fs:nothing
  5.  
  6. .data?
  7. mivariable dd 0
  8.  
  9. .code
  10. codigo:
  11. mov   [mivariable], 0
  12. retn
  13. nuevo dd ?
  14.  
  15. end codigo
en ese caso funciona perfectamente
porque no funciona esto?
 gracias de antemano


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 2 Agosto 2014, 23:51 pm
Ademas de que offset ahi no tiene sentido alguno el problema es que si mivariable esta en la sección .code es de solo lectura, si intentas escribir en ella se produce una excepcion.


Título: Re: [masm][pregunta]problema con variables
Publicado por: daryo en 2 Agosto 2014, 23:56 pm
bueno raro que este asi pero cuando lo quito es igual
Código
  1.    .386
  2.    .model flat, stdcall
  3.    option casemap:none
  4.    assume fs:nothing
  5.  
  6.    .code
  7.    mivariable dd  0
  8.    codigo:
  9.    mov   [mivariable], eax
  10.    retn
  11.    nuevo dd ?
  12.  
  13.    end codigo
  14.  

si sirve de algo en el ollydbg me dice acces violation when writing[direccion ] cuando llega al mov


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 2 Agosto 2014, 23:59 pm
si sirve de algo en el ollydbg me dice acces violation when writing[direccion ] cuando llega al mov

Si, como te decia el codigo es read/only, si le haces un VirtualProtect y le das escritura funciona pero no tiene mucho sentido poner variables en el codigo igual.


Título: Re: [masm][pregunta]problema con variables
Publicado por: daryo en 3 Agosto 2014, 00:01 am
mmm creo que lo tenia configurado para no solo fuera read/only revisare eso y si algo vuelvo por aca :)


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 3 Agosto 2014, 00:03 am
A menos que hagas algo con el linker por defecto la sección de codigo llamada .text tendra permisos de lectura y ejecucion, lo cual es logico.

Asi te funcionara tambien:
link x.obj /subsystem:console /section:.text,RW


Título: Re: [masm][pregunta]problema con variables
Publicado por: xv0 en 3 Agosto 2014, 00:08 am
Como te dijo @Eternal Idol no puedes escribir en la sección .text, y eso que quieres hacer no tiene sentido alguno, ni .data ni mucho menos en .text, haz un push eax y punto.

Un saludo.


Título: Re: [masm][pregunta]problema con variables
Publicado por: daryo en 3 Agosto 2014, 00:14 am
A menos que hagas algo con el linker por defecto la sección de codigo llamada .text tendra permisos de lectura y ejecucion, lo cual es logico.

Asi te funcionara tambien:
link x.obj /subsystem:console /section:.text,RW

si tenias razon no lo tenia con RW gracias solucionado


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 3 Agosto 2014, 00:23 am
De nadas  ::)

Igual si es para comprender el funcionamiento sirve mas alla de eso el codigo en si mismo no tiene ningun sentido (las variables no van junto al codigo y EAX es un valor indefinido a esa altura).


Título: Re: [masm][pregunta]problema con variables
Publicado por: Vaagish en 3 Agosto 2014, 23:05 pm
Hola! Yo cuando uso /ALIGN:4 la sección .text se puede escribir.. no se por que..  :rolleyes:

Saludos!


Título: Re: [masm][pregunta]problema con variables
Publicado por: MCKSys Argentina en 4 Agosto 2014, 15:50 pm
hola estoy leyendo un libro de masm y dentro de los codigos de ejemplo hay uno que no me funciona:

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. assume fs:nothing
  5.  
  6. .code
  7. mivariable dd  0
  8. codigo:
  9. mov   [offset mivariable], eax
  10. retn
  11. nuevo dd ?
  12.  
  13. end codigo
  14.  

el error es :
asi me funciona:

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. assume fs:nothing
  5.  
  6. .data?
  7. mivariable dd 0
  8.  
  9. .code
  10. codigo:
  11. mov   [mivariable], 0
  12. retn
  13. nuevo dd ?
  14.  
  15. end codigo
en ese caso funciona perfectamente
porque no funciona esto?
 gracias de antemano

Probaste definir la variable como LOCAL ?
Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. assume fs:nothing
  5.  
  6. .code
  7. local mivariable:DWORD
  8. codigo:
  9. mov   mivariable, eax
  10. retn
  11. nuevo dd ?
  12.  
  13. end codigo
  14.  


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 4 Agosto 2014, 16:52 pm
Vaagish: con MASM32 me da LINK : warning LNK4108: /ALIGN specified without /DRIVER or /VXD; image may not run y efectivamente en Windows 8.1 x64 no me funciona. Fijate con dumpbin si .text tiene permisos de escritura en tu caso ...

MCKSys Argentina: no ensambla, tiene que estar dentro de un PROC (o MACRO), en principio deberia funcionar (usando la pila) pero no explica el problema en cuestion.


Título: Re: [masm][pregunta]problema con variables
Publicado por: Vaagish en 4 Agosto 2014, 22:46 pm
Citar
Vaagish: con MASM32 me da LINK : warning LNK4108: /ALIGN specified without /DRIVER or /VXD; image may not run y efectivamente en Windows 8.1 x64 no me funciona. Fijate con dumpbin si .text tiene permisos de escritura en tu caso ...

Tnks por la prueba.. en xp y 7 de 32 bits me funciona.. creo que el problema es en x64 de cualquier versión..

Trate con esto que pusiste ahi:
Citar
/subsystem:console /section:.text,RW

Citar
LINK.EXE /SECTION:.text,rw /SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5",3

Desde RadASM, no importa el orden que le de..
Pero me dice:

Citar
fatal error LNK1104: cannot open file "rw /SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 /LIBPATH:C:\Masm32\Lib /OUT:$5.obj"

EDIT: Ta, problema de RadASM.. funciona perfecto..

Saludos!


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 4 Agosto 2014, 22:51 pm
Te falta el archivo objeto de input  ;D Igual RadASM no es mas que un IDE, para probar algo asi usa la linea de comandos, ya despues cuando lo tengas funcionando lo integraras en la configuracion del IDE.

PD. Asumo que cambiaste el nombre a la sección de codigo por defecto.


Título: Re: [masm][pregunta]problema con variables
Publicado por: Vaagish en 4 Agosto 2014, 22:57 pm
Citar
Te falta el archivo objeto de input  ;D Igual RadASM no es mas que un IDE, para probar algo asi usa la linea de comandos, ya despues cuando lo tengas funcionando lo integraras en la configuracion del IDE.

PD. Asumo que cambiaste el nombre a la sección de codigo por defecto.

Jeje si, había puesto mal el nombre.. ademas el IDE no funciona donde hay una coma

Saludos!  ;D


Título: Re: [masm][pregunta]problema con variables
Publicado por: MCKSys Argentina en 5 Agosto 2014, 01:57 am
Esto me compila y funciona bien (WinAsm):

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. .code
  6. codigo:
  7. jmp codigo1
  8. mivariable dd  0
  9. codigo1:
  10. mov mivariable, eax
  11. ret
  12. end codigo
  13.  

Assemble:/c /coff /Cp /nologo

Link: /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /SECTION:.text,ERW

Saludos!


Título: Re: [masm][pregunta]problema con variables
Publicado por: Eternal Idol en 5 Agosto 2014, 11:28 am
Logico, la sección es RW, esta esa la razon para que funcione o no, tener o no permisos de escritura en la sección donde se pone la variable. Aunque esto ya estaba demostrado y sin el salto, simplemente haciendo que el entry point sea posterior ...