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: .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. .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: .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
|