Empezando con ASM

Iniciado por W0lFy, 30 Junio 2009, 09:06 AM

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

W0lFy

Buenas, estoy empezando con el tipico MessageBox de Hola mundo,

hasta ahora lo que tengo es:

include "c:\include\win32ax.inc'

.data

cuerpo db "Este es el Cuerpo",0
titulo db "Este es el titulo",0

.code

start:
push MB_OK
push titulo
push cuerpo
push 0
call [MessageBox]




.end start


Bueno este codigo me imprime la tipica ventana con OK con titulo y cuerpo, existe alguna manera de poder cambiar la variable cuerpo? por ejemplo

si yo tengo esta variable definida

cuerpo db "Este es el Cuerpo",0

ahora quiero que cuerpo sea:

cuerpo="Este es el 56 cuerpo",0
supongo que es accediendo a la direccion de la memoria de cuerpo y sumarle tantos caracteres *4 como queramos , creo que es asi pero no se como modificar esa direccion exacta, igual estoy confundido, me podrían ayudar?Es indispensable para mi aprendizaje, Gracias!! Un saludo!
K@NuT0

Eternal Idol

En este caso no podrias excepto que no te importara sobreescribir la memoria que le sigue (en este caso titulo) debido a que no reservaste suficiente espacio para la nueva cadena. Lo que podes hacer sin problema es esto:

Código (asm) [Seleccionar]
mov [cuerpo], 'H'
mov [cuerpo+1], 'o'
mov [cuerpo+2], 'l'
mov [cuerpo+3], 'a'
mov [cuerpo+4], 0


Por cierto pone un ret o un ExitProcess despues del MessageBox (y cerra con comillas - " - el include).
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

W0lFy

Gracias Eternal voy a probar, jeje los errores de despues no te preocupes, que son porque copie rapidamente, Gracias!
K@NuT0

Eternal Idol

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

W0lFy

Tengo otra duda:

Si yo tengo esta variable:

cuerpo db    'Hola Mundo',0

y quiero modifi car el 5 caracter de la variable digamos que yo lo modificaria asi:

mov [cuerpo+4], 0x61   ; por ejemplo

pero y si quiero pasarle un valor numerico que tengo almacenado en uan variable?

por ejemplo si  eax= 0x0000005

quiero hacer un mov[cuerpo+4], eax   ; y que el resultado obtenido sea este:
cuerpo= 'Hola4Mundo',0


despues me gustaria saber como puedo reservar memoria para poder poner un string a mi antojo. Un saludo!
K@NuT0

Eternal Idol

Para que un digito se convierta en caracter tenes que sumarle el codigo ASCII de 0 (48), este es un ejemplo basado en el otro:

Código (asm) [Seleccionar]
mov [cuerpo], 'H'
mov [cuerpo+1], 'o'
mov [cuerpo+2], 'l'
mov [cuerpo+3], 'a'
mov eax, 5
add eax, '0'
mov [cuerpo+4], al
mov [cuerpo+5], 0


Para reservar memoria en tiempo de ensamblaje (?) podes hacer esto:

Código (asm) [Seleccionar]
.data
una_cadena db 128 dup(0)


El resultado es 128 bytes en la sección de datos cuyo valor es 0.
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

YST

#6
Código (asm) [Seleccionar]

include 'win32ax.inc'
.data
cuerpo db    'Hola Mundo',0
Datos db 99 dup (0) ; Reservamos 99 bytes
.code
start:
xor eax,eax
mov eax,4
or al,"0"
mov byte[cuerpo+4],al
invoke MessageBox,0,cuerpo,0,0
invoke ExitProcess,0
.end start                                     


Hay tienes un ejemplo de lo que querias hacer :P


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

Eternal Idol

¿Para que la introducir Datos al codigo? En fin, todo sea por la redundancia.
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

YST

Cita de: Eternal Idol en 30 Junio 2009, 14:58 PM
¿Para que la introducir Datos al codigo? En fin, todo sea por la redundancia.

No entiendo muy bien lo que dices.

Si es por lo de

Código (asm) [Seleccionar]
Datos db 99 dup (0)

era para mostrarle como se hacia , aunque no tiene importancia en el codigo en si :P


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

Eternal Idol

Si, me referia a eso exactamente, era redundante.
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