Article View: ch.comp.os.linux
Article #18405strcpy/strcat Anomalie
From: Dominik Berner
Date: Thu, 23 Mar 2000 00:00
Date: Thu, 23 Mar 2000 00:00
40 lines
1598 bytes
1598 bytes
Hi,
Mir ist aufgefallen, dass man in C Arrays überlaufen lassen kann, ohne
eine Fehlermeldung zu kriegen.
Das ganze funktioniert so (Beispiel-Programm am ende)
Ein array [one] mit grösse 1 wird mit einem Zeichen gefüllt ('\0'
überschrieben). Danach werden an ein anderes, grösseres Array [cross]
mit strcat *mehr* Zeichen angehängt, als eigentlich reinpassen. Das
Resultat: one enthält das komplette Array cross. Werden die Arrays in
umgekehrter Reihenfolge deklariert, enthält one nur die überzähligen
Zeichen, wird eines, oder beide der Arrays Global definiert, verhält
sich alles normal.
Keine Ahnung, wieso es sich genau so verhält und ob man das irgendwie
brauche kann um z.B. Programme zu umgehen oder einen DoS auszuüben.
#include <stdio.h>
#include <string.h>
main()
{
char cross[5];
char one[1];
strcpy(one, "x");
strcat(cross, "123456789");
printf("DEBUG %s\n", one);
}
GruZZ Domi-Zufall-nik
--
Guns don't kill people. Bullets do.
Technical Details
Message-ID:
<38DA5C18.8317881@weltuntergang.ch>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII X-Google-Thread: f4b73,5512f1ce4457836d,start X-Google-Attributes: gidf4b73,public From: Dominik Berner <kingdom@weltuntergang.ch> Subject: strcpy/strcat Anomalie Date: 2000/03/23 Message-ID: <38DA5C18.8317881@weltuntergang.ch> X-Deja-AN: 601386131 Content-Transfer-Encoding: quoted-printable X-Accept-Language: en Content-Type: text/plain; charset=iso-8859-1 X-Trace: 23 Mar 2000 19:03:32 +0100, 212.254.1.189 Organization: DataComm (Schweiz) AG MIME-Version: 1.0 Newsgroups: ch.comp.os.linux