Forum: Compiler & IDEs Stack Overflow automatisch erkennen


von Klaus (Gast)


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?

von Valko Z. (hydravliska)


Lesenswert?

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

von Josef D. (jogedua)


Lesenswert?


von klaus (Gast)


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
}

von Josef D. (jogedua)


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.

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
Noch kein Account? Hier anmelden.