Seruvs allseits... Ich las mir grade den Artikel Sichere ASP-Programmierung hier( http://www.nickles.de/c/s/kategorien-von-angriffen-357-2.htm ) durch. Mike gibt dabei ein Beispiel in C, mal abgesehen davon dass er seinen String nicht initialisiert hat, wie kommt Mike darauf, dass ein char* > 9 Byte einen Pufferüberlauf verursacht Das char[] ist mit 16 byte definiert, und ich komme da auf 15 Zeichen maximale länge(+\0 zur stringterminierung wären dann 16)
Einfach nur ein Fehler?
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hallo!
Frag ihn doch...
Gruss
ChrE
darum dieser fred hier
Naja ich bin mir fast sicher das er das einfach irgendwoher übernommen hat.
Da gab es ja einige MSDN Webcasts mit quasi identischem Wortlaut.
Wie gross char[] ist hängt prinzipiell erstmal vom Zielsystem ab und ist nicht
konstant auf jedem Rechner gleich.
irrtum.
Im gegensatz zu int und anderen datentypebn ist char immer 256 bit gross. Zumindest hat er im ANSI-C eine feste Länge
Okay bei echtem C weiss ich es nicht aber ich habe verschiedene VM-Ware Systeme wo mir sizeof(char) in VC++6 definitv unterschiedliche Werte liefert.
mmh... tatsächlich ist ein char nicht 256 Bit breit, habs grade nachgeschlagen, dafür aber exakt 1 byte:
»Alle Speicherobjekte in C müssen durch eine gleichmäßige Sequenz von Bytes mit mindestens 8 Bits Breite darstellbar sein. Ein char, egal ob jetzt signed oder unsigned, belegt exakt ein Byte.«
will heissen ein char ist immer min 256bit breit, aber auch immer nur genau ein byte. Dementsprechned variiert die grösse eines Char mit der Definition des Byte der jeweiligen Architektur.
> will heissen ein char ist immer min 256bit breit, aber auch immer nur genau ein byte. Dementsprechned variiert die grösse eines Char mit der Definition des Byte der jeweiligen Architektur.
joa würde ich so unterschreiben.
trotzdem sollte folgende ausgabe immer 1 sein:
char irgendwas;
int x = sizeof(irgendwas);
printf("%c\n",x);
Der Artikel ist nicht von mike sondern von TW (Thomas Wölfer) und ist in ähnlicher Form auch noch anderweitig erschienen.
Ich habe ihn mal per Mail auf diesen Thread aufmerksam gemacht ;-)
Gruß
Borlander
Die Angabe von 9 Byte ist Blödsinn. Vermute mal das da beim Druck/Konvertieren oder sonstwo was kaputt gegangen ist. Platz ist logischerweise für 16 byte. Der buffer overflow tritt also erst bei strings größer 16 byte auf.
Ein deutlich besserer Beitrag von mir zum Thema Buffer Overflow gibts hier: (http://www.microsoft.com/austria/technet/articles/basiswissen_buffer_overflow.mspx).
WM_FYI
-thomas woelfer