Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Hesp en 9 Junio 2012, 00:06 am



Título: Supuesto buffer overflow con printf en MASM32
Publicado por: Hesp en 9 Junio 2012, 00:06 am
Muy buenas.

Este sencillo programa da un fallo exactamente en el printf (no al compilar), imagino que es por no poner el correcto tamaño en:
Código
  1. %d
se que
Código
  1. SysTime.wYear
es
Código
  1. word
, pero no se a que correspondería en C, he probado toda las combinaciones, así que espero que me digais que hago mal  :huh:

Código
  1. include masm32rt.inc
  2.  
  3. .data?
  4.  
  5. SysTime SYSTEMTIME <?>
  6.  
  7. .data
  8.  
  9. .code
  10. start:
  11. invoke GetSystemTime, addr SysTime
  12. printf("%d\n", SysTime.wYear);
  13. inkey "Press a key to continue ..."
  14. invoke ExitProcess, NULL
  15. end start


Título: Re: Supuesto buffer overflow con printf en MASM32
Publicado por: x64core en 9 Junio 2012, 00:15 am
printf en MASM? estoy seguro que e visto una printf en MASM pero creo que es de Basic.inc hecho por jochen
o a menos que estes enlazando las librerias de VC a MASM?


Título: Re: Supuesto buffer overflow con printf en MASM32
Publicado por: Hesp en 9 Junio 2012, 00:39 am
printf en MASM? estoy seguro que e visto una printf en MASM pero creo que es de Basic.inc hecho por jochen
o a menos que estes enlazando las librerias de VC a MASM?

Gracias por contestar.

Se trata de la High Level Macro de MASM32 en Console Mode Macros (en el HELP de MASM32)

No se si la macro esta bug, o el fallo es mio lo mas seguro xD


Título: Re: Supuesto buffer overflow con printf en MASM32
Publicado por: x64core en 9 Junio 2012, 01:05 am
vaya, la verdad quiza es que esta en las nuevas versiones de MASM porque yo tengo el viejo MASM
pero si no es la de hecho por jochen entonces:

Código:
INVOKE    crt_printf, ADDR formato, argumento1, argumento2

es declarada como crt_printf y hay un wrapper por printf.
eso debería funcionar  :)


Título: Re: Supuesto buffer overflow con printf en MASM32
Publicado por: Hesp en 9 Junio 2012, 21:01 pm
Bien, despues de pedir ayuda en el foro de MASM32 ya que se trataba de un problema mas bien especifico de MASM32, obtuve la solución:

Citar
the problem is probably, that wYear is a WORD, which cause the invoke macro to produce bad code -> move the value to a 32Bit GPR and then pass it to the macro:
Código
  1. movzx edx,SysTime.wYear
  2. printf(...,edx)

Así que aplicándolo al code seria:

Código
  1. include masm32rt.inc
  2.  
  3. .data?
  4.  
  5. SysTime SYSTEMTIME <>
  6.  
  7. .data
  8.  
  9. .code
  10. start:
  11. invoke GetSystemTime, addr SysTime
  12. movzx edx, SysTime.wYear
  13. printf("%d\n", edx);
  14. inkey "Press a key to continue ..."
  15. invoke ExitProcess, NULL
  16. end start

Muchas gracias!!


Título: Re: Supuesto buffer overflow con printf en MASM32
Publicado por: x64core en 10 Junio 2012, 09:09 am
como dije desde un principio ese printf es de basic.inc de jochen , hasta el mismo te respondio  ::)