Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: theghost_te en 27 Noviembre 2010, 01:48 am



Título: ¿por qué me da errores en este code MASM? saltos y etiquetas
Publicado por: theghost_te en 27 Noviembre 2010, 01:48 am
Hola, estaba practicando saltos condicionales y etiquetas en MASM32, e hice este code:

Código:
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
classname db "notepad",0    ;classname del block de notas
nuevotitulo db "caption cambiado en MASM32",0
titulo db "ejemplos de saltos y etiquetas",0
mensajeencontrado db "Se encontró el classname",0
mensajenoencontrado db "No se encontró el classname",0


.data?
controlador dd ?

.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
cmp controlador,0 ; NULL
jne encontrado  ;si es diferente de cero salta a encontrado
cmp controlador,0
je noencontrado ;si es igual a cero salta a noencontrado
ret

encontrado:
invoke MessageBox, NULL, addr mensajeencontrado, addr titulo, MB_OK
invoke SetWindowText, controlador,addr nuevotitulo  ;cambia el titulo del block de notas
invoke ExitProcess, NULL
ret

noencontrado:
invoke MessageBox, NULL, addr mensajenoencontrado, addr titulo, MB_ICONERROR
invoke ExitProcess, NULL
end noencontrado

Como ven lo que hace es buscar al block de notas por su classname, si encuentra se va a la etiqueta encontrado donde muestra mensaje y cambia el caption del block, sino saca  un mensaje de que no necontro, he abierto el block de notas antes de ejecutar mi code pero siempre me salta a la etiqueta "noencontrado", lo curioso es que cuando cambio los saltos condicionales y le pongo el incondicional JMP para que vaya directo a la etiqueta encontrado aún asi tambien este salta a noencontrado.

Código:
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
classname db "notepad",0    ;classname del block de notas
nuevotitulo db "caption cambiado en MASM32",0
titulo db "ejemplos de saltos y etiquetas",0
mensajeencontrado db "Se encontró el classname",0
mensajenoencontrado db "No se encontró el classname",0


.data?
controlador dd ?

.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
jmp encontrado
ret

encontrado:
invoke MessageBox, NULL, addr mensajeencontrado, addr titulo, MB_OK
invoke SetWindowText, controlador,addr nuevotitulo  ;cambia el titulo del block de notas
invoke ExitProcess, NULL
ret

noencontrado:
invoke MessageBox, NULL, addr mensajenoencontrado, addr titulo, MB_ICONERROR
invoke ExitProcess, NULL
end noencontrado

Pero cuando ejecuto solo la etiqueta inicio sin salto ni nada es decir: findwindow, mov y setwindowtext si me cambia el caption al block de notas:

Código:
.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
invoke SetWindowText, controlador, addr nuevotitulo
invoke ExitProcess, NULL
end inicio

Please una mano con esto llevo un buen rato en esta dificultad, estuve buscando saltos y etiquetas en MASM32 pero solo encuentro ejemplo que no me sacan de duda, en este codigo ¿qué  hice mal?


Título: Re: ¿por qué me da errores en este code MASM? saltos y etiquetas
Publicado por: Eternal Idol en 27 Noviembre 2010, 12:33 pm
No mire el codigo demasiado pero si lo depuras vas a ver inmediatamente que no hace nada de lo que esperas por una razon: el entry point del programa no es inicio.

Al poner end noencontrado eso hace que noencontrado sea el entry point, es decir el programa se ejecuta desde ahi hasta el final ...  mejor pone end inicio :silbar:


Título: Re: ¿por qué me da errores en este code MASM? saltos y etiquetas
Publicado por: theghost_te en 27 Noviembre 2010, 18:02 pm
Gracias man, eso era el problema.


Título: Re: ¿por qué me da errores en este code MASM? saltos y etiquetas
Publicado por: Eternal Idol en 27 Noviembre 2010, 18:53 pm
De nadas  ;D