http://www.pronix.de -> Forum -> Linux-Unix Programmierung

Forum: Linux-Unix Programmierung

Moderatoren: juergen, Martin Conrad

Thema: Speicheradressen

  • (nur registrierte Mitglieder)

Speicheradressen

burner am 15.12.2003 um 22:00

erstmal hallo miteinander

ich hab ein kleines programm geschrieben, wie folgt:

*****************************************
int main(void) {
char buf[12];
char *p;

printf("gib ein kurzes wort ein: ");
scanf("%s", buf);

for(p = buf; *p; p++)
printf("%p\n", p);

return 0;
}
******************************************

nun, dass funktioniert soweit so gut, es gibt die speicheraddressen
der einzelnen buchstaben (so denk ich auf jedenfall) aus. nun lass ich
aber das programm durch den gdb laufen, dieser jedoch gibt mir andere
adressen aus, kann mir mal jemand erklaeren, wo da der haken ist??

gruss bjoern

--
Einer der vielen Gründe warum es Fehlermeldungen gibt ist, dass ich im Forum nicht posten muss "ich hatte irgend so nen komischen Fehler" ... :oops:

 

Speicheradressen

juergen (webmaster) am 16.12.2003 um 08:00

Hallo Bjoern,

Auf die Speicheradresse selbst, wo das Programm sein Variablen ablegt, hast Du im Prinzip keinen Einfluss - da dies vom System bestimmt wirdd. Jedem Programm werden bestimmte Speicherbereich für bestimmte Zwecke zur Verfügung gestellt (siehe auch Das Speicherkonzept).

Wenn Du jetzt im Listing bspw. weitere Variablen einfügst, kann (wird) sich die Adresse der einzelnen Zeichen von buf wieder woanders befinden. Bspw.:

#include <stdio.h>
int main(void) {
/* füge das hier hinzu und wieder weg */
int x, y;
char buf[12];
char *p;

printf("gib ein kurzes wort ein: ");
scanf("%s", buf);

for(p = buf; *p; p++) 
printf("%p\n", p);

return 0;
}


Schließlich ist ja eine Speicheradresse im RAM nicht von Dauer und nur für das eine Programm bestimmt. Zwar hat dein Programm immer ein Recht auf eine bestimmte Menge an Speicher aber ist dies nicht von dauer. Ich hoffe das einigermaßen einfach erklärt zu haben.

Gruss
Jürgen

P.S.: Gefährlicher Code:

char buf[12];
...
scanf("%s",buf);


Siehe Buffer Overflow
 

Speicheradressen

burner am 16.12.2003 um 11:17

danke juergen

einbischen hats geholfen, aber es koennte in dem fall sein, dass wenn ich
im gdb einen breakpoint
break scanf
setzte, und den zeiger auf das erste element im array auslese mit
info reg eax
dann sollten die folgenden werte doch irgendwie gleich sein, oder es kommt
halt noch etwas zu meinem programm hinzu, das mit dem breakpoint zu tun
hat.

die erste ausgabe des Programmes lautet: 0xbffffb7
die erste ausgabe im GDB lautet : 0xbffffd7

P.S.: das ist ein Programm zum rumspielen und ausprobieren
in "wirklichkeit" sollten ich schon testen, dass nicht zu
viel eingegeben werden kann!!

gruss bjoern

--
Einer der vielen Gründe warum es Fehlermeldungen gibt ist, dass ich im Forum nicht posten muss "ich hatte irgend so nen komischen Fehler" ... :oops:

 

Speicheradressen

juergen (webmaster) am 16.12.2003 um 12:43

Zitat:
P.S.: das ist ein Programm zum rumspielen und ausprobieren
in "wirklichkeit" sollten ich schon testen, dass nicht zu
viel eingegeben werden kann!!


Ich hoffe, dass dies nicht als Besserwisserei oder als Kritisierung von meiner Seite gesehen wurde - oder ich Dir sonst wie auf dem Fuss getreten bin - währe dann nicht meine Absicht gewesen
Ich habs halt nur erwähnt, weil viele Andere (u.a. Anfänger) auch die Threads lesen und daher --- aber es gehört ja nicht hierher.

Viele Grüsse
Jürgen
 

Speicheradressen

burner am 16.12.2003 um 13:34

AUF JEDENFALL WILL UND WOLLTE ICH DEINE SEITE _NICHT_ KRITISIEREN!!!!!!!!!!!!,

dass wir uns richtig verstehen, ich habe sehr viel von deiner seite gelernt und bin
dir dafuer auch DANKBAR!!

und besserwissen werde ich's auf keinen fall.
-------------------------------------------------------------------------------

ich komm nur nicht draus, warum der gdb mir eine andere speicheradress ausgiebt,
was aber eigentlich auch nicht so wichtig ist, weils irgendwie mit beiden klappt.

--
Einer der vielen Gründe warum es Fehlermeldungen gibt ist, dass ich im Forum nicht posten muss "ich hatte irgend so nen komischen Fehler" ... :oops:

 
  • (nur registrierte Mitglieder)