GCC zu erkennen, wie stack-überlauf

Da gibt es eine option -fstack-protector-strong im gcc zu erkennen, stack-smashing. Allerdings kann es nicht immer erkennen, dass stack-überlauf. Für die erste Funktion func, wenn ich Eingangs ein 10 char mehr Schnur, wird das Programm nicht immer abstürzt. Meine Frage ist, wo gibt es eine Möglichkeit zu erkennen, stack-überlauf.

void func()
{
    char array[10];
    gets(array);
}

void func2()
{
    char buffer[10];
    int n = sprintf(buffer, "%s", "abcdefghpapeas");
    printf("aaaa [%d], [%s]\n", n, buffer);
}

int main ()
{
   func();
   func2();
}
  • Warum Sie Kennzeichnen die Frage C++, und dann code schreiben, wie das?
  • wäre es nicht logischer, um zu vermeiden, dass in den ersten Platz? Zum Beispiel mit snprintf(buffer, sizeof(buffer), "%s", ...)
  • Es ist dort zu erkennen, ob der stack ist zerschlagen, um nicht zu erkennen, wenn Sie überlaufen des Puffers. Verwenden Sie mehr Zeichen.
  • da kommt es in einem legacy-code, um zu minimieren die Auswirkungen von code-änderungen, es ist besser, lassen das Programm Abstürzen, wenn überlauf Auftritt
  • Glaubst du, es gibt eine undokumentierte -fstack-protector-strong-but-i-mean-for-real-now option oder so?
  • Der stack und buffer sind zwei komplett verschiedenen Dinge.
  • nicht ganz, weil der Puffer auf dem Stapel reserviert.

InformationsquelleAutor Michael D | 2013-09-30
Schreibe einen Kommentar