PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem: Memory-Leaks und Codeinjection



mrsuicide
16-08-2003, 23:14
Ich bin zwar schon länger C++ Coder, will mich aber jetzt mal mit dem Thema näher beschäftigen!
Einige Fragen:

1. Was ist ein Memory Leak, wie entsteht es? (Beispielcode!)

Ich habe gehörtes kann dadurch unbeabsichtigter Code ausgeführt werden...
1. Wie kommt er darein? (Beispielcode!)
2. Wie kann solcher Code erzeugt werden? (Assembler, oder kann man das auch mit C++ und gcc machen?)

3. Wie kann soetwas verhindert werden? (wie erkennt man schwachstellen im Code, wie fixt man sie, Tips für vorausschauende Programmierung)

Es wäre gut, wenn ich Beipielcode hätte, so z.B. einen Fehlerhaten Code mit Leak und zum einfügenCode um z.B. "Hello world!" auf der Konsole auszugeben.

wraith
16-08-2003, 23:35
1. Was ist ein Memory Leak, wie entsteht es? (Beispielcode!)

ML: Es gibt Speicher,auf den du keinen Zeiger mehr hast,um diesen freizugeben.
Bsp


char *p = malloc(100000);
p = 0;

Aber das ist z.b kein ML


int main()
{
char *P = malloc(1000000);
}

Die Unterschiede sind diffiziell.



Ich habe gehörtes kann dadurch unbeabsichtigter Code ausgeführt werden...

Durch ein ML?Nö,du meinst wohl Bufferoverflow


1. Wie kommt er darein? (Beispielcode!)

http://community.core-sdi.com/~gera/InsecureProgramming/



3. Wie kann soetwas verhindert werden? (wie erkennt man schwachstellen im Code, wie fixt man sie, Tips für vorausschauende Programmierung)

Programmiere in C++ (wirklich,nicht irgendeinen C Mix),also vermeide Raw-Pointer,und die ganzen C Funktionen.
IMO fängt man durch konsequenten Einsatz von std::string statt char*,und std::vector statt type*,90% potienzieller Bufferoverflows ab.
Sieh' dir den Link an,die meisten Bufferoverflows entstehen durch crappy C Code (wer C programmiert und es immer noch nicht gelernt hat,wie man zb. Eingabelängen begrenzt sollte lieber Basic programmieren).
Wie oft sieht man so einen Code


char buffer[100];
scanf("%s",buffer);

So steht der wohl in jedem Anfängerbuch für C,aber warum wird nicht gleich die korrekte Methode gezeigt? (oder nur die,damit sich das gleich einbrennt).

mrsuicide
17-08-2003, 02:42
Danke (der Link is klasse!).

Wie kann ich die Adressen von Variablen im Speicher mit einem Tool rausbekommen?
z.B.
0x10 -> blabla
0x16 -> dada
0x20 -> 20
...

cyneox
17-08-2003, 09:18
Original geschrieben von wraith


char buffer[100];
scanf("%s",buffer);



du meinst wohl es muss so aussehen:


char buffer[100];
scanf("100%s",buffer);

oder

char *bufer;
scanf("%s",buffer);



?????

wraith
17-08-2003, 09:26
<snip Code von cyneox>
Nein.

Korrekt


char buffer[100];
scanf("%99s",buffer);

cyneox
17-08-2003, 20:12
ach ja...ich vergesse immer dass buffer[0] das erste element ist..naja trotzdem danke für die "aufklärung".

mrsuicide
18-08-2003, 00:40
Original geschrieben von mrsuicide
Danke (der Link is klasse!).

Wie kann ich die Adressen von Variablen im Speicher mit einem Tool rausbekommen?
z.B.
0x10 -> blabla
0x16 -> dada
0x20 -> 20
...
Antwort?

Boron
18-08-2003, 09:59
Das & Zeichen ist der Addressoperator.

int gaga;
int* zeiger = &gaga;So einfach kommst du an die Adresse einer Variablen.