Heap overflow [Pascal] |
14.06.2007, 15:00 | tigerbine | Auf diesen Beitrag antworten » | |||||
Heap overflow [Pascal] Was ist das? http://www.my-smileys.de/smileys3/hideing_behind_computer.gif
?? http://www.my-smileys.de/smileys3/chinese_2.gif?? |
|||||||
14.06.2007, 17:13 | sqrt(2) | Auf diesen Beitrag antworten » | |||||
Was an dem Text verstehst du nicht? Raten ist übrigens sehr mühselig, du könntest schon die relevanten Codeteile posten... |
|||||||
14.06.2007, 17:21 | tigerbine | Auf diesen Beitrag antworten » | |||||
Hallo sqrt(2), Es wäre nun müßig jedes Wort des Textes farbig zu unterlegen. Geh einfach mal davon aus, dass ich von dem "wie ein Computer arbeitet" keine Ahnung habe. Hier der Code.
|
|||||||
14.06.2007, 17:47 | sqrt(2) | Auf diesen Beitrag antworten » | |||||
Außerdem wäre es übertrieben.
Du weißt, aber, dass das Ding irgendwie Arbeitsspeicher hat. Wir lassen jetzt mal das Betriebssystem beiseite, das soll die ganze Adressierung für uns erledigen. Dann kannst du einfach davon ausgehen, dass es zwei Typen von Speicher gibt, in dem du Daten ablegen kannst: Heap und Stack. Der Stack ist -- wie der Name schon sagt -- sowas wie ein Stapel (korrekt heißt er auf deutsch "Kellerspeicher", warum auch immer): Du kannst oben was drauflegen, aber auch nur von oben wieder was herunternehmen. Der Stack wird dazu verwendet, die Parameter und lokalen Variablen von Funktionen zu speichern: Beim Funktionsaufruf werden sie einfach oben auf den Stack draufgepackt. Ruft deine Funktion noch eine Funktion auf, packt die wiederum ihre Variablen oben drauf: Die der aufrufenden Funktion braucht man ja jetzt erstmal nicht. Wenn eine Funktion zu Ende ist, nimmt sie ihre Variablen einfach vom Stack wieder herunter und die aufrufende Funktion hat wieder ihre eigenen Variablen oben. Im Heap kannst du auf Speicher zugreifen und ihn wieder freigeben, wie du willst. Globale Variablen und dynamisch allokierter Variablen liegen im Heap. Der Witz an der Sache ist jetzt: Erstens verwendest du den Heap kaum und zweitens bietet Freepascal einen dynamisch wachsenden Heap, d.h. um dessen Größe musst du dich eigentlich gar nicht kümmern. Meine Theorie ist folgende: Auf vielen Plattformen wächst der Stack abwärts (von hohen zu niedrigen Speicheradressen), der Heap aufwärts. (Wenn du dir deinen Speicher als Hochhaus vorstellst, werden für den Stack die obersten Stockwerke abwärts vollgeräumt und für den Heap die unteren aufwärts.) Den Stack verwendest du durch die Rekursion aber schon (obwohl du jetzt auch keine wahnsinnig großen Rekursionstiefen hast). Heap und Stack können sich irgendwo in der Mitte treffen (deswegen sind die Stackgrößen eigentlich vorher festgelegt), vielleicht hast du in der Richtung ein Problem. Du könnest einfach mal probieren, größere Stackgrößen einzustellen (dafür gibt es Compilerswitches, schau im Handbuch nach). |
|||||||
14.06.2007, 17:53 | tigerbine | Auf diesen Beitrag antworten » | |||||
Das war jetzt mal eine Erklärung, die ich Dummy auch verstanden habe. Bis auf den Letzen Satz.
Handbuch von wem? |
|||||||
14.06.2007, 17:56 | sqrt(2) | Auf diesen Beitrag antworten » | |||||
http://www.freepascal.org/docs-html/ |
|||||||
Anzeige | |||||||
|
|||||||
14.06.2007, 17:57 | tigerbine | Auf diesen Beitrag antworten » | |||||
Danke |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|