[masm][pregunta]problema con variables

Iniciado por daryo, 2 Agosto 2014, 23:35 PM

0 Miembros y 1 Visitante están viendo este tema.

daryo

hola estoy leyendo un libro de masm y dentro de los codigos de ejemplo hay uno que no me funciona:

Código (asm) [Seleccionar]
.386
.model flat, stdcall
option casemap:none
assume fs:nothing

.code
mivariable dd  0
codigo:
mov   [offset mivariable], eax
retn
nuevo dd ?

end codigo


el error es :
Citarerror A2001: immediate operand not allowed

asi me funciona:

Código (asm) [Seleccionar]

.386
.model flat, stdcall
option casemap:none
assume fs:nothing

.data?
mivariable dd 0

.code
codigo:
mov   [mivariable], 0
retn
nuevo dd ?

end codigo

en ese caso funciona perfectamente
porque no funciona esto?
gracias de antemano
buenas

Eternal Idol

#1
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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

daryo

#2
bueno raro que este asi pero cuando lo quito es igual
Código (asm) [Seleccionar]
   .386
   .model flat, stdcall
   option casemap:none
   assume fs:nothing
   
   .code
   mivariable dd  0
   codigo:
   mov   [mivariable], eax
   retn
   nuevo dd ?
   
   end codigo
   


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

Eternal Idol

Cita de: daryo en  2 Agosto 2014, 23:56 PMsi 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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

daryo

mmm creo que lo tenia configurado para no solo fuera read/only revisare eso y si algo vuelvo por aca :)
buenas

Eternal Idol

#5
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
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

cpu2

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.

daryo

Cita de: 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

si tenias razon no lo tenia con RW gracias solucionado
buenas

Eternal Idol

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).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Hola! Yo cuando uso /ALIGN:4 la sección .text se puede escribir.. no se por que..  :rolleyes:

Saludos!