Hallo,
ich fahre FreeBSD:
und ich kapiere nicht so ganz, wie hier die Bytes auf dem Stack angeordnet werden, wenn ich eine Funktion aufrufe, und diese lokale daten enthaelt.
Ich habe also eine main funktion (in C), die ruft eine eigene Funktion auf. dort habe ich einmal ein int-Array mit 5 Elementen deklariert. Da wurden dann 40 Bytes auf dem Stack für das Array (oder noch mehr?) platz gemacht.
Für ein char-array mit 10 Elementen wurden hingegen 24 Bytes auf dem Stack reserviert.
Wenn ich jetzt beide Arrays auf den Stack legen lasse in der Funktion, werden 56 (!) Bytes reserviert.
Ich weiss zwar, dass die Daten wortweise (also 4 Byte-mässig) angelegt werden, aber trotzdem ist mir das nicht wirklich klar.
Warum bei dem int-array denn 40 Byte? nach sizeof() belegt ein int auf der Architektur 2 Byte. Aber für 40 Byte müsste ja für jeden Eintrag *1* ganzes Wort angelegt werden. Stimmt das? Aber warum sind es dann beim 10-er charArray dann gerade *24*? und nicht 80(fuer jeden arrayeintrag) oder 12 (oder logischer auf vielfaches von 4 aufgerundet)?
Und die Kombination der beiden auf 56 kapiere ich erst recht nicht. wenn man beide addiert von den grössen, ist 64 um einiges grösser, okay, da kann man sparen, aber wie wird das dann angelegt?
Kann mir da einer helfen? Ich kapiere das gar nicht.
Stackprotection ist meines Wissens nicht an, und es sieht imo auch nicht danach aus.
Hilfe wäre echt nett.
ich fahre FreeBSD:
Code:
FreeBSD laptop 6.2-RELEASE-p2 FreeBSD 6.2-RELEASE-p2 #0: Tue Feb 27 22:41:06 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386
und ich kapiere nicht so ganz, wie hier die Bytes auf dem Stack angeordnet werden, wenn ich eine Funktion aufrufe, und diese lokale daten enthaelt.
Ich habe also eine main funktion (in C), die ruft eine eigene Funktion auf. dort habe ich einmal ein int-Array mit 5 Elementen deklariert. Da wurden dann 40 Bytes auf dem Stack für das Array (oder noch mehr?) platz gemacht.
Für ein char-array mit 10 Elementen wurden hingegen 24 Bytes auf dem Stack reserviert.
Wenn ich jetzt beide Arrays auf den Stack legen lasse in der Funktion, werden 56 (!) Bytes reserviert.
Ich weiss zwar, dass die Daten wortweise (also 4 Byte-mässig) angelegt werden, aber trotzdem ist mir das nicht wirklich klar.
Warum bei dem int-array denn 40 Byte? nach sizeof() belegt ein int auf der Architektur 2 Byte. Aber für 40 Byte müsste ja für jeden Eintrag *1* ganzes Wort angelegt werden. Stimmt das? Aber warum sind es dann beim 10-er charArray dann gerade *24*? und nicht 80(fuer jeden arrayeintrag) oder 12 (oder logischer auf vielfaches von 4 aufgerundet)?
Und die Kombination der beiden auf 56 kapiere ich erst recht nicht. wenn man beide addiert von den grössen, ist 64 um einiges grösser, okay, da kann man sparen, aber wie wird das dann angelegt?
Kann mir da einer helfen? Ich kapiere das gar nicht.
Stackprotection ist meines Wissens nicht an, und es sieht imo auch nicht danach aus.
Hilfe wäre echt nett.