gdb und float in Argumentliste von printf
-
Hallo zusammen,
ich habe ein Problem mit dem Verständnis der Darstellung einer Kommazahl (float) auf dem Stack. Siehe Code und GDB ausgabe. Wie wird die KOmmazahl umgewandel? Das IEEE754 format ist es anscheind nicht. Oder steht der float garnicht an der stelle mit den Fragezeichen? Kann mich jemand erleuchten?
Hier der C-Code:
#include <stdio.h> #include <string.h> int main(){ char * mystring = "forFun"; printf ("eine zahl: %i ein Problem: %f myString : %s\n", 1 , 1.234 , mystring ); return 0; }
Hier die Ausgabe:
(gdb) c
Continuing.
eine zahl: 1 ein Problem: 1.234000 myString : forFunHier der Stack Frame:
(gdb) x/80x $ebp //Return Adr //Format Sting // die 1 0xbffff718: 0xbffff758 0x0804841c 0x080484f8 0x00000001 //???????? //???????? //forFun 0xbffff728: 0xc8b43958 0x3ff3be76 0x080484f0 0x00283ff4 0xbffff738: 0x08048440 0xbffff758 0x0015d4a5 0x0011e0 . . .
P.s.: Eine kleine Nebensache, als 1. wird die Ret Adresse auf den Stack gelegt dann die Variablen. Der Stack wächst richtung kleine Adresse hier ist aber die Return Adresse auf einer kleinen und die variablen wachsen gen große adressen? Kann mir das jemand erklären? Ich glaube ich habe da einfach nur einen Denkfehler.
Güße,
LausBub
-
Du übergibst da einen
double
-Wert, der anscheinend 8 Bytes belegt.
-
Ich glaube nicht, dass "forfun" auf dem Stack landet. Das ist eine Konstante.
-
Ok ich habs.
Ausgeben kann man sich den float mit:
(gdb)x/gf <speicheradresse der linken 5 Byte> hier 0xbffff728Die Ausgabe ist dann 1.234. Um das mit den gängigen iee754 umrechnern nachvollziehen zu können muss man die datenbits im umgekehrter reihenfolge eingeben (die 4 byte jeweils vertauschen) Das sieht dann so aus:
3ff3be76c8b43958 . Raus kommt dann 1.2340000000000000Grüße,
LausBub
-
1.234f
ist ein float.