Foro de elhacker.net

Programación => 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
  1. format PE GUI 4.0
  2.  
  3. include 'C:\fasm\include\win32ax.inc'
  4.  
  5. push MB_YESNO
  6. push mensaje
  7. push captio
  8. push 0
  9. call [MessageBoxA]
  10. cmp eax, IDYES
  11. jne exit
  12. jmp gracias
  13.  
  14. gracias:
  15.  
  16. push MB_OK
  17. push mensaj
  18. push capt
  19. push 0
  20. call [MessageBoxA]
  21. jmp exit
  22.  
  23. exit:
  24.  
  25. push 0
  26. push [ExitProcess]
  27.  
  28. mensaje db 'mensaje', 0
  29. captio db 'exito!!', 0
  30. mensaj db 'mensaje', 0
  31. capt db 'XD', 0
  32.  
  33.  
  34. data import
  35.  
  36. library kernel32, 'KERNEL32.DLL', user32, 'USER32.DLL'
  37. import user32, MessageBoxA, 'MessageBoxA'
  38. import kernel32, ExitProcess, 'ExitProcess'
  39.  
  40. 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
  1. format PE GUI 4.0
  2.  
  3. include 'd:\fasm\include\win32ax.inc'
  4.  
  5. .code
  6. start:
  7.  
  8.        push MB_YESNO
  9.        push mensaje
  10.        push captio
  11.        push 0
  12.        call [MessageBoxA]
  13.        cmp eax, IDYES
  14.        jne exit
  15.        jmp gracias
  16.  
  17. gracias:
  18.  
  19.        push MB_OK
  20.        push mensaj
  21.        push capt
  22.        push 0
  23.        call [MessageBoxA]
  24.        jmp exit
  25.  
  26. exit:
  27.  
  28.        push 0
  29.        call [ExitProcess]
  30. .end start
  31.  
  32. .data
  33.  
  34.        mensaje db 'mensaje', 0
  35.        captio db 'exito!!', 0
  36.        mensaj db 'mensaje', 0
  37.        capt db 'XD', 0  
  38.  


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

Citar
Si 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.