Stackverhalten gcc
-
Ich habe folgendes Programm geschrieben:
int main(int argc, char *argv[]) { char buffer1[5]; char buffer2[10]; strcpy(buffer2,argv[1]); printf("\nbuff1: %s\nbuff2: %s\n\n",buffer1,buffer2); return 0; }
und habe mit dgb angefangen ein bischen mit der eingabe rum zu spielen um herraus zu finden wann ich einen overflow habe, und das erstaunlich ist, das ich erst bei der eingabe von 27 'A' chars einen overflow hatte der auch das Programm "zerstört" hat. Aber die größe von 27 bzw 26 wenn man kein Absturz erreichen möchte ist total unlogisch. Es ist kein vielfaches von der Summe der Arraygrößen und ist auch nicht die Summe an sich. Ausserdem bei einer Eingabe von 10 'A' wird das erste A bereits in buffer1 geschrieben, wenn ich aber 26 'A' eingebe werden aber 25 'A' in buffer2 geschrieben? Wie kann man sich erklären?
Ich benutze Ubuntu 10.04 und mein Compiler wär dann der aktuelle gcc.
danke für eure Hilfe
-
Schau Dir halt den Assembleroutput an. Grundsätzlich befinden sich ja nicht nur die lokalen Variablen und die Rücksprungadresse auf dem Stack, der Compiler könnte z.B. auch einige Register beim Einstieg gesichert haben.
mfg Martin
-
Debugge halt das Programm mit gdb
gdb>./prog
gdb>disassm
gdb>break 0xdie_adresse_z.b._nach_strcpy
gdb>i r
Ich glaub so müsstest du es sehen können.
Aber ich finde gdb nicht so toll^^ida is besser.