Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: Belial & Grimoire en 31 Mayo 2012, 06:09 AM

Título: porque me sale un error al finalizar el programa?
Publicado por: Belial & Grimoire en 31 Mayo 2012, 06:09 AM
hola

estoy estudiando asm, hice un ejemplo de messagebox en fasm, pero no se porque me sale un error al finalizar el programa, alguien sabe que podria ser?

Código (asm) [Seleccionar]
format PE GUI 4.0

include 'C:\fasm\include\win32ax.inc'

push MB_YESNO
push mensaje
push captio
push 0
call [MessageBoxA]
cmp eax, IDYES
jne exit
jmp gracias

gracias:

push MB_OK
push mensaj
push capt
push 0
call [MessageBoxA]
jmp exit

exit:

push 0
push [ExitProcess]

mensaje db 'mensaje', 0
captio db 'exito!!', 0
mensaj db 'mensaje', 0
capt db 'XD', 0


data import

library kernel32, 'KERNEL32.DLL', user32, 'USER32.DLL'
import user32, MessageBoxA, 'MessageBoxA'
import kernel32, ExitProcess, 'ExitProcess'

end data                               
Título: Re: porque me sale un error al finalizar el programa?
Publicado por: Eternal Idol en 31 Mayo 2012, 10:30 AM
push [ExitProcess]

en lugar de call.

Te recomiendo depurar con WinDbg, cuando superas unas pocas lineas se ve mas rapido depurando que leyendo el codigo.

Título: Re: porque me sale un error al finalizar el programa?
Publicado por: _Enko en 31 Mayo 2012, 15:46 PM
Si usas  las macros extendidas: win32ax.inc
No hace falta que pongas los import a mano.
Código (asm) [Seleccionar]

format PE GUI 4.0

include 'd:\fasm\include\win32ax.inc'

.code
start:

        push MB_YESNO
        push mensaje
        push captio
        push 0
        call [MessageBoxA]
        cmp eax, IDYES
        jne exit
        jmp gracias

gracias:

        push MB_OK
        push mensaj
        push capt
        push 0
        call [MessageBoxA]
        jmp exit

exit:

        push 0
        call [ExitProcess]
.end start

.data

        mensaje db 'mensaje', 0
        captio db 'exito!!', 0
        mensaj db 'mensaje', 0
        capt db 'XD', 0 


La macro ".end" se encarga de adjuntar todos los imports. Luego fasm al ensamblar solo importa los que tu hayas usado.

Título: Re: porque me sale un error al finalizar el programa?
Publicado por: Belial & Grimoire en 31 Mayo 2012, 18:33 PM
a cierto, no me di cuenta de push, gracias

CitarSi usas  las macros extendidas: win32ax.inc
No hace falta que pongas los import a mano.

Eso no lo sabia, gracias por decirme

salu2
Título: Re: porque me sale un error al finalizar el programa?
Publicado por: Eternal Idol en 31 Mayo 2012, 18:38 PM
De nadas.