Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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: %d se que
Código (asm) [Seleccionar]
SysTime.wYear es
Código (asm) [Seleccionar]
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 (asm) [Seleccionar]
include masm32rt.inc

.data?

SysTime SYSTEMTIME <?>

.data

.code
start:
invoke GetSystemTime, addr SysTime
printf("%d\n", SysTime.wYear);
inkey "Press a key to continue ..."
invoke ExitProcess, NULL
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
Cita de: RHL 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?

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:

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:

Citarthe 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 (asm) [Seleccionar]
movzx edx,SysTime.wYear
printf(...,edx)

Así que aplicándolo al code seria:

Código (asm) [Seleccionar]
include masm32rt.inc

.data?

SysTime SYSTEMTIME <>

.data

.code
start:
invoke GetSystemTime, addr SysTime
movzx edx, SysTime.wYear
printf("%d\n", edx);
inkey "Press a key to continue ..."
invoke ExitProcess, NULL
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  ::)