Moin! Ich versuche gerade einen Mechanismus zu basteln, der automatisch einen Stackoverflow erkennt. Zwar nicht im Moment des Geschehens, aber zumindest soll eine Funktion das nachträglich erkennen können. Das Prinzip ist ja einfach: Am Ende des Datensegments soll eine Variable liegen, in der ein ganz bestimmter Wert steht. Bei einem Stack Overflow wird diese Variable überschrieben, und das kann ich in der Hauptschleife prüfen. Mein Problem ist nun, wie bekomme ich diese eine Variable ans Ende der data Section platziert?
Hi, das kann man direkt im Linkerskript eingeben, der genau synthax habe ich jetzt nicht im Kopf. Im Doku der Linker sind aber auch Beispiele dabei. Gruss: Valentin
Valentin S. schrieb: > das kann man direkt im Linkerskript eingeben, der genau synthax habe ich > jetzt nicht im Kopf. Im Doku der Linker sind aber auch Beispiele dabei. Sowas:
1 | .data : { |
2 | /* ... */ |
3 | . += ALIGN(4); |
4 | __magic_word_ptr = .; |
5 | LONG(0xabbaaffe) |
6 | } |
Bei der in http://www.rn-wissen.de/index.php/Speicherverbrauch_bestimmen_mit_avr-gcc mem-check.h / mem-check.c beschriebenen Methode wird der gesamte Bereich zwischen Variablen und Stack geprüft. Das hat den Vorteil, dass man schon während der Entwicklung sehen kann, dass und wie der freie Bereich immer kleiner wird. Man kann so ein Gefühl dafür entwickeln, ab wann es wohl eng wird. Mit der Linker-Methode würde man ja wohl nur dann einen Hinweis bekommen können, wenn der GAU schon passiert ist und das Programm trotzdem noch läuft (gut, vier Byte Reserve hätte man schon). Und wenn man malloc(), printf(), ... benutzt, würden wohl auch die vom Linker geseztzen Werte überschrieben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.