Re: libc/printf bug
- From: Jan Panteltje <pNaonStpealmtje@xxxxxxxxx>
- Date: Tue, 28 Feb 2006 12:35:09 GMT
On a sunny day (Mon, 27 Feb 2006 23:55:20 GMT) it happened Micah Cowan
<micah@xxxxxxxxxx> wrote in <8764n09wph.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>:
Jan Panteltje <pNaonStpealmtje@xxxxxxxxx> writes:I think when the subroutine is called, the variables are on teh stack.
On a sunny day (27 Feb 2006 12:09:54 -0800) it happened "bill pursell"
<bill.pursell@xxxxxxxxx> wrote in
<1141070994.179527.261050@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>:
The following code exhibits unexpected behavior. Either it'sHow would you print a float in hex?
a bug in libc, or the author (me) is blind as a bat. Am I missing
something here, or is something horribly wrong? It appears
that printf is mangling the address unless the second argument
gets cast. I don't see that the cast should have any effect at all
on the output. Any thoughts?
[tmp]$ cat printf_bug.c
int
main()
{
float a=0;
printf("%p\n", &a);
printf("%x %p\n", a, &a);
printf("%x %p\n", (int)a, &a);
}
[tmp]$ ./a.out
0xfefb6764
0 (nil)
0 0xfefb6764
[tmp]$
Actually, floating point types now have a hexadecimal
representation. See if your system/C-implementation has the "a" and
"A" conversion specifiers.
I think print will convert it to integer, and that is 0.
It will not: variadic functions are "dumb" about what you're passing
it. You have to explicitly cast.
How much the stackpointerneeds to be incremented for each variable
is set by its type (the function will use that).
So if you wite %x the thing will increment stackpointer by some bytes to
get the next variable.
If that increment was wrong (because you handed it a float), then it
will have the next variable as some part of the current one.
I still think Asm here, push this push that, then index stackpointer
to get those vars back.
'variadic' my foot.
.
- Follow-Ups:
- Re: libc/printf bug
- From: "Nils O. Selåsdal"
- Re: libc/printf bug
- References:
- libc/printf bug
- From: bill pursell
- Re: libc/printf bug
- From: Jan Panteltje
- Re: libc/printf bug
- From: Micah Cowan
- libc/printf bug
- Prev by Date: libXft2
- Next by Date: Re: libc/printf bug
- Previous by thread: Re: libc/printf bug
- Next by thread: Re: libc/printf bug
- Index(es):
Relevant Pages
|