Hallo,
bin Backfrisch hier im Forum.
Hab folgende Frage bzw. kuriose Feststellung:
Ich definiere 2 Variablen (in C):
Code:
char flag = 0;
char buffer[5];
Im Debugger bekomme ich folgende Infos:
Code:
(gdb) x/x &flag
0xbffff39f: 0xfff3b400
(gdb) x/s buffer
0xbffff39a: "\374\267ȅ\004"
Nun, hier ist ja noch alles in Ordnung: `flag' ist vor `buffer' auf dem Stack
Wenn ich jetzt aber für den buffer mehr Speicher allozier wirds komisch:
Code:
char flag = 0;
char buffer[10];
GDB sagt:
Code:
(gdb) x/x &flag
0xbffff391: 0xd0bfff00
(gdb) x/s buffer
0xbffff392: "\377\277\320j\353\267\340\204", <incomplete sequence \374\267>
Jetzt ist `buffer' vor `flag' auf dem Stack. Das erscheint mir extrem verrückt.
Ich will nämlich eigentlich einen Buffer Overflow erzeugen und so die Variable `flag' überschreiben.
Warum werden die beiden Variablen in verschiedenen Reihenfolgen auf den Stack gelegt?
Vielen Dank für Müh und Not