🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: ch.comp.os.linux
Article #18405

strcpy/strcat Anomalie

#18405
From: Dominik Berner
Date: Thu, 23 Mar 2000 00:00
40 lines
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-mail

Show 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