Stack Overflow automatisch erkennen

Gast #1635715
Lesenswert?

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?
Gast #1636790
Lesenswert?

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
}
#1636876
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren