Ich schreibe eine C-Bibliothek, die Wrapper-Funktionen für strcpy, strcat, gets usw. bereitstellt, um Pufferüberlaufangriffen vorzubeugen. Im Grunde genommen behalte ich die Größe aller Puffer im Auge und verhindere, dass über den zugewiesenen Speicher geschrieben wird. Ich bin in der Lage, dynamisch zugewiesene Puffer zu verfolgen, indem ich Wrapper für malloc, calloc und realloc schreibe. Aber ich konnte nicht die Größe des Puffers im Stapel bekommen.Pufferüberlaufschutz für stackbasierte Puffer
char s[10];
char *s1 = "stackoverflow";
strcpy(s,s1);
Der Aufruf von ‚strcpy‘ in dem obigen Code würde meine Wrapper-Funktion aufrufen, die
char *strcpy(char* s1, const char* s2)
wie
aussieht Da die Funktion die Quelle als char * nimmt, ich bin nicht in der Lage, die Größe wissen des Quell-Arrays, das sich im Stack befindet. Ich habe versucht, den Stack-basierten Puffer neu zuzuordnen und mein Programm ist abgestürzt. Ist die Neuzuordnung des Puffers eine praktikable Lösung dafür? Jede Hilfe wird geschätzt.
Sie können auch nicht die Größe von Globalen oder die Größe von Arrays innerhalb einer Struktur ermitteln. Beispiel: 'struct person {char name [28]; int age} '- 'malloc' kann wissen, dass es 32 Bytes zugewiesen hat, aber 'strcpy' kann diese 32 Bytes für den Namen nicht verwenden. – MSalters
Sie können das nicht tun. Die einzige Möglichkeit, Pufferüberläufe zu verhindern, besteht nicht darin, 'strcpy'-ähnliche Funktionen zu verwenden, sondern diese durch äquivalente Funktionen zu ersetzen, bei denen Sie explizit die Größe des Zielpuffers übergeben. Z.B. 'secure_strcpy (s, s1, buffersize);' –
Denken Sie darüber nach - wenn es so einfach wäre, hätte es jemand schon getan. –