RedWing
Erfahrenes Mitglied
Hallo,
also unter Windows ist die Differenz bei mir für einen 18 Byte großen Puffer
44 Byte Ich weiß nicht wieso:
Weiterhin hab ich mal folgendes Programm unter Linux gedebugt:
Also das sollten 26 a's sein. Sprich 18 a's für den Puffer. 4 a's für den
Framepointer, und mit den letzten 4a's wird der eip überschrieben.
Folgendes kam dabei dann raus:
Eventuell versuchst du das auch mal bei dir, würd mich intressieren was bei rumkommt.
Das mit diesen 44 Bytes unter Windows hab ich keine Erklärung dafür
Gruß,
RedWing
also unter Windows ist die Differenz bei mir für einen 18 Byte großen Puffer
44 Byte Ich weiß nicht wieso:
Code:
stack address of b =0x22eedc
stack address of test =0x22eee0
stack address of a =0x22ef0c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht f"ur VERKAUFBARKEIT oder F"UR SPEZIELLE ZWECKE.
CYGWIN_NT-5.1 euklid 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin
Weiterhin hab ich mal folgendes Programm unter Linux gedebugt:
Code:
#include <stdio.h>
#include <string.h>
int foo(){
char test[18];
strcpy(test, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
return 0;
}
int main(){
foo();
return 0;
}
Framepointer, und mit den letzten 4a's wird der eip überschrieben.
Folgendes kam dabei dann raus:
Code:
(gdb) r
Starting program: /home/redwing/a.out
Program received signal SIGSEGV, Segmentation fault.
0x61616161 in ()
(gdb) info frame
Stack level 0, frame at 0xbfad770c:
eip = 0x61616161; saved eip 0x61616161
called by frame at 0xbfad7710
Arglist at 0xbfad7704, args:
Locals at 0xbfad7704, Previous frame's sp is 0xbfad770c
Saved registers:
eip at 0xbfad7708
(gdb) q
The program is running. Exit anyway? (y or n) y
Das mit diesen 44 Bytes unter Windows hab ich keine Erklärung dafür
Gruß,
RedWing