Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: _Enko en 1 Diciembre 2011, 16:53 pm



Título: masm, msvcrt.
Publicado por: _Enko en 1 Diciembre 2011, 16:53 pm
Hola, pense que era mi compu que tenia algun conflicto con visual studio o algo, pero no. Instalacion nueva del paquete de http://www.masm32.com/

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap :none   ; case sensitive
  4.      include C:\masm32\include\windows.inc
  5.      include C:\masm32\include\kernel32.inc
  6.      include C:\masm32\include\user32.inc
  7.      include C:\masm32\include\msvcrt.inc
  8.      includelib C:\masm32\lib\kernel32.lib
  9.      includelib C:\masm32\lib\msvcrt.lib
  10.      includelib C:\masm32\lib\user32.lib
  11.  
  12. .code
  13.    szPause db 'pause',0
  14.    szFmt db '%s',0
  15.    charsWritten dd 0
  16. start:
  17.    invoke AllocConsole
  18.    invoke GetStdHandle, STD_OUTPUT_HANDLE
  19.    invoke WriteConsole, eax, offset szPause, 5, offset charsWritten,NULL
  20.    invoke crt_printf,offset szFmt, offset szPause
  21.    invoke crt_system, offset szPause
  22.    invoke ExitProcess, 0
  23.    ret
  24. end start
  25.  
El resultado deberia de ser "pausepausePresione una tecla para continuar..."
Sin embargo, crt_printf no imprime la cadena, si devuelve 5 que son los caracteres que escribio. Es decir esta "imprimiendo el texto" pero no se imprime en la pantalla.

1)
Alguna idea de porque no imprime con printf?
Con o sin AllocConsole el resultado es el mismo. aunque printf se tendria que encargar solo de alojar una consola si  no esta  creada.


Saludos.


Título: Re: masm, msvcrt.
Publicado por: Eternal Idol en 1 Diciembre 2011, 17:42 pm
¿Cambia en algo no llamar a WriteConsole? Mezclar la CRT con la API tal vez de problemas ...


Título: Re: masm, msvcrt.
Publicado por: _Enko en 1 Diciembre 2011, 18:48 pm
¿Cambia en algo no llamar a WriteConsole? Mezclar la CRT con la API tal vez de problemas ...

Originalmente el codigo era sin llamar a la api.
Código
  1. .386
  2. .model flat, stdcall
  3. option casemap :none   ; case sensitive
  4.  
  5. include \masm32\include\msvcrt.inc
  6. includelib \masm32\lib\msvcrt.lib
  7.  
  8. .code
  9. szMsg         db "hola mundo",0
  10. szPause       db "Pause",0
  11. szFrm         db "%s",0
  12.  
  13. start:
  14.  
  15. invoke crt_printf, offset szFrm,  offset szMsg    
  16. ;push offset szMsg
  17. ;push offset szFrm
  18. ;call crt_printf
  19. ;add esp, 8
  20.  
  21. push offset szPause
  22. call crt_system
  23. add esp, 4
  24.  
  25. ret
  26. end start
  27.  

pd: si uso qedit, Antes guardo el archivo y luego  es BuildAll o AssembleLink?

Saludos.


edited:
milagrosamente cai en el problema...
SOLUCION:
en QEdit para aplicacion consola hay que hacer click en
CONSOLE BUILD ALL.

ya me parecia muy raro.


Título: Re: masm, msvcrt.
Publicado por: Eternal Idol en 1 Diciembre 2011, 19:09 pm
Si, el problema es que el SUBSYSTEM es WINDOWS y no CONSOLE. Yo tambien use Assembly & Link y Build All y asi no funcionaron por eso, despues use lineas de comandos y funciono  ;D


Título: Re: masm, msvcrt.
Publicado por: _Enko en 1 Diciembre 2011, 19:20 pm
Jeje, cosas que pasan cuando la herramienta no es SISO. (Same Input = Same Output) :laugh:

desde ayer me habia encaprichado de que no funcionara y no encontraba explicacion... bastante molesto, dormi mal  :P


gracias por tomarte el  tiempo de ayudar :)



Título: Re: masm, msvcrt.
Publicado por: Eternal Idol en 1 Diciembre 2011, 19:23 pm
Jeje de nadas, la linea de comandos es lo mas  ;-)