mikrocontroller.net

Forum: Compiler & IDEs Stack Overflow automatisch erkennen


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Valko Zapalko (hydravliska)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Josef D. (jogedua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
.data : {
  /* ... */
  . += ALIGN(4);
  __magic_word_ptr = .;
  LONG(0xabbaaffe)
}

Autor: Josef D. (jogedua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der in

http://www.rn-wissen.de/index.php/Speicherverbrauc...
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.