Hola foro, pues recien en mi tiempo libre he estado leyendo este cursito de ASM http://foro.elhacker.net/asm/tutoriales_videoturiales_de_masm_radmasm-t263579.0.html
Ya logre llegar a la parte de creacion de ventanas hijas pero se me ocurrio que podria hacer que un boton redirija hacia alguna web "x" en internet asi como para que visite esta web o cualquier otra.
Espero no molestar pero la verdad tengo esa inquietud, gracias de antemano.
Mediante ShellExecute (http://msdn.microsoft.com/en-us/library/bb762153%28VS.85%29.aspx) podrias abrir una web con el navegador :P
Gracias, en cuanto la escuela me de algo de tiempo lo pruebo y comento. :D
De nuevo yo con otra duda.
Y es posible ejecutar comandos de ms-dos usando RadASM + MASM?
tengo algunas ideas y si eso fuera posible seria genial para mi, gracias de antemano.
Msdos ? te refieres a interrupciones ?a comandos de batch ? o a que ? :P
Para comandos de batch podes usar pipes que te permitirian leer lo que deuvuelve el comando :P
Usando CreateProcess, el primer parametro es (PATH COMPLETO pese a lo que dice la MSDN) cmd.exe y el segundo /c + el nombre del archivo batch (o comando).
Si me refierfo a la consola "cmd".
Lo que pasa es que me eh encontrado con este tipo de scripts que usan la consola y la verdad me parece algo muy util.
http://dc102.4shared.com/download/46342775/5519d19d/mata_virus_amvo_usb.vbs?tsid=20090922-163156-b8dc9c7f
Y si lograra controlar la consola usando instrucciones en ASM podria serme muy util en la creacion de programas.
Supongamos que quiero ejecutar el comando "makedir" alguien podria decirme como hacerlo en ASM?
Nesesito declarar alguna instruccion en especial y despues colocar los comandos a ejecutar? o como?
Supongamos:
Ejecuton la plantilla para una caja de dialogo y creo un boton, pero no se que agregar para ejecutar dicho comando, en .vbs es muy sencillo pero aqui no tengo la mas minima idea, podria alguien explicarmelo en este codigo?
.elseif eax==WM_COMMAND
mov edx,wParam
.if edx==Boton1
?????????????
Espero me expliquen por favor.
thanks
CreateProcess (http://www.google.com/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms682425(VS.85).aspx&ei=Y0O5SpfbDcWMjAf7kunrBQ&usg=AFQjCNGoOJ6ndBHvRHNNsrf-8pfd9R_ZBw) necesitas, un vb script lo podes ejecutar igual, en lugar de cmd necesitas cscript o wscript y el nombre del script.
La verdad no entendi mucho (Estoy pesimo en ingles), creo que si me explicaras un ejemplo entenderia mejor, solo con un comando y ya para borrar mis dudas.
Ahi mismo sobre el final hay un ejemplo, no es un comando, es una API de Windows y para poder usarla tenes que comprender los parametros que necesita.
Gracias, otra dudita.
Que instrucciones nesecito para realizar multiplicaciones y divisiones?
Para multiplicar
Imul y Mul
para dividir
idiv y div :P
La de "imul" me funciono pero no la de "div" ni "idiv" no entiendo porque, solo estaaba probando y escribi:
idiv eax,ebx
claro esta que ya habia moido valores a esos registros pero no me deja compilar.
Que sera??
xor edx,edx
mov eax,9 ;Le pasamos el dividendo
mov edi,3 ;Le pasamos el divisor
idiv edi ;Dividimos pasandole edi como dividendo
;En eax se devuelve el valor y en edx el resto
Gracias, funciono correctamente.
Ahora tengo la duda de porque me salen mal las sumas.
estuve diseñando una calculadora para que sume y todo bien pero al momento de la suma toma los valores como si 1=49 osea si pongo 1+1=98.
Podrias revisar que es lo incorrecto por favor.
ASM:
.elseif eax==WM_COMMAND
mov edx,wParam
.if edx==boton1
invoke GetDlgItemText,hWin,edit1,addr valor1,100
invoke GetDlgItemText,hWin,edit2,addr valor2,100
mov eax,valor1
mov ebx,valor2
add eax,ebx
invoke dwtoa,eax,addr resultado
invoke MessageBox,hWin,addr resultado,addr tittlemsj,MB_OK
INC
.data
msgtittle db "Salir?",0
msgtexto db "Desea salir?",0
tittlemsj db "SUMA",0
.data?(?)
resultado dd ?
valor1 dd ?
valor2 dd ?
Tienes que transformar el ASCII ;)
Mira esta función
;Funcion que pasa ASCII a un DWORD :P
proc StrToInt uses ebx esi, lpStr
mov esi,[lpStr]
mov ecx,10
xor edx,edx
@StrToIntLoop:
lodsb
test al,al
jz @StrToIntEnd
sub al,'0'
xor ebx,ebx
mov bl,al
lea eax,[edx*2]
lea eax,[eax+edx*8]
lea edx,[eax+ebx]
dec ecx
jnz @StrToIntLoop
@StrToIntEnd:
mov eax,edx
ret
endp
También podrias usar la api GetDlgItemInt para obtener el numero directamente :P
http://msdn.microsoft.com/en-us/library/ms645485%28VS.85%29.aspx
PD: Algo interesante para ti
http://www.ascii.cl/es/
Ohh, gracias.
La verdad un minuto despues de postear recorde que talvez ocuaba otra instruccion para hacer la convrsion de ASCII a DECIMAL pero antes de probar preferi esperar una respuesta, y creo que estaba en lo correcto, gracias, ahora intento y edito el mensaje para mostrar resultados:-)
EDITO:
Cambie la funcion "GetDlgItemText" por "GetDlgItemInt" pero ahora la me suma cada campo "edit" como "1", osea si escribo en un campo sin importar el numero me muestra la unidad como resultado y si escribo en los dos campos me muestra el numero "2".
Alguien sabe como usar la funcion "CreateProcces"?
lo intente pero no me funciono, me aparece esto en la informacion:
"CreateProcess,lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadAttributes,bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDriectory,lpStartupInfo,lpProcessInformation"
alguien podria explicarme con un ejemplo por favor.
Disculpen tantas molestias.
En la MSDN (http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx) se explica como usar esa funcion y hay codigo de ejemplo, sino Googlea.
Ejemplo del uso de CreateProcessA
invoke CreateThread , 0, 0,Direccion de la funcion,Parametro para pasar a la función(alternativo),0 , 0;Creamos el hilo para descargar
¿Podrias poner el codigo ? para ver que esta mal que todavia no soy adivino :xD
Lo hice simple.
solo escribi asi.:
invoke CreateProcces,0,0,addr Ruta,0,0,0
Solo invoke la ruta, sabia que algo andaba mal pero no estoy seguro.
Esta mal, mira el enlace que deje, en los primeros parametros se le puede pasar el programa en cuestion.
Me ausente un poco por eso de la escuela y esas cosas.
ahora bien.
El problema con la funcion "CreateProcces" y con coger los numeros de un campo edit fueron solucionados :)
Ahora estuve buscando una funcion para comprobar si un archivo existe en una ruta espeicifica, pero por desgracia no la encuentro,
Si la conocen me podrian dar el nombre porfavor.
PD: No consulte el MSDN porque no lo puedo ver con mi conexión a internet :(
CreateFile
GetFileAttributes (http://msdn.microsoft.com/en-us/library/aa364944%28VS.85%29.aspx).