malloc und segfaults

  • okay, mitunter eine bisschen doofe Verständnisfrage

    warum liefert mir das angefügte codestückchen keinen segfault?

    Code
    char *f = malloc(sizeof(char));
    
    
    strcat(f, "foo");
    strcat(f, "bar");
    
    
    printf("%s", f);

    ich leg für char *f ja nur ein byte speicher an. ist das compiler / system abhängig, wird da irgendetwas unsichtbar "ausgebessert"?

    ich dachte ich hätte die speicherallokierung geschnallt (so schwer ist das ja eigentlich nicht), aber das macht für mich grad keinen sinn.

  • Würde jeder Buffer Overflow einen Segmentation Fault produzieren, wären Buffer Overflows lange nicht das Problem, das sie tatsächlich sind. In C wird nie überprüft, ob du über einen allokierten Speicherbereich hinausschreibst. Erst wenn du in einen Speicherbereich kommst, von dem das Betriebssystem weiß, dass du dort definitiv nichts verloren hast, hast du einen Segmentation Fault. Bis du dorthin kommst, kannst du aber schon recht viel in dem Speicherbereich, der deinem Programm gehört, überschrieben haben.

  • ... und zusätzlich wird dir malloc vermutlich generell keinen Block der Länge 1 zurückgeben, sondern die Länge aufs nächste Vielfache von 8 oder 16 Bytes aufrunden. Von daher hast du in deinem Beispiel vermutlich zumindest 8 Bytes gekriegt, auch wenn du nur eines wolltest, und hättest so gesehen gar keinen Buffer Overflow produziert. Aber mit Sicherheit kann man das natürlich nicht wissen.

    *plantsch*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!