Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: MNemo am 29. July 2006, 14:07
-
Also ich hatte vor soe ein Expand Down Segment für meine Stack zu verwenden. Nun hab ich mal darüber informiert, aber leider muste ich fest stellen, dass nicht überall das gleiche steht. :roll:
z.B. beim Limit
ich hab gelesen das der offset mit <Limit> anfängt und mit 0xFFFF(32bit 0xFFFFFFFF) aufhört
ich hab aber auch schon gelesen das der Offset mit mit 0xFFFF bzw. 0xFFFFFFFF aufhört und das segment insgesamt <Limit> größ ist
nun ist da leider ein größer unterschied 8)
Könnt ihr mir sagen wie das jezt wirklich funzt?
-
Nun ja, auch wenn der Stack von oben nach unten wächst, brauchst du dafür kein Expand-Down Segment.
Und eigentlich wird da nur ein Vorzeichen geändert soweit ich weiss. So endet das Segment nicht bei Offset + Limit, sondern bei Offset - Limit. Da bin ich mir nicht mehr 100%ig sicher, ich hab das Teil nie wirklich benutzt.
-
Ich will das Expand Down segment für den Stack weil man es bei stack overflow erweitern kann.(hab ich gelesen)
-
Ich nehme an du hast also sowieso kein flaches Speichermodell?
-
Ich nehme an du hast also sowieso kein flaches Speichermodell?
Tut mir leid aber ich wieß noch nicht ma was das ist :oops:
-
Ich nehme an du hast also sowieso kein flaches Speichermodell?
Tut mir leid aber ich wieß noch nicht ma was das ist :oops:
Keine Angst, wir vergeben dir. ^^ Also wenn ich jetzt nichts falsches sage, ist das 0-Ende sprich im 32 Bit PM 0 - 4 GByte Segmente. Es wird dann einfach durch Offsets und Paging geschützt. Geht z.B. beim Lmode nicht anders.
bitmaster
-
Also so ein flaches Speichermodell benutz ich nicht(Stell ich mir auch ganzschön komplieziert vor)
Wir da bei jedem Taskwechsel dann die pages vertaucht, damit der Offset in den Tasks stimmt?
-
Ein flaches Speichermodell ist eigentlich überhaupt nicht kompliziert.
Da hast du nur 2 Deskriptoren in der GDT und arbeitetst nur mit den Offsets.
Wegen den Tasks. Jeder Task hat ja das Register CR3. Darin wird eine Adresse auf eine Tabelle, welche alle erlaubten Speicherbereiche für den Task mappt, definiert. Bei einem Taskwechsel wird also auch das CR3 automatisch gewechselt.
Noooooooooooos
-
Also so ein flaches Speichermodell benutz ich nicht(Stell ich mir auch ganzschön komplieziert vor)
Genau das Gegenteil ist der Fall.
Wir da bei jedem Taskwechsel dann die pages vertaucht, damit der Offset in den Tasks stimmt?
Beim Taskwechsel wird nur das page-directory neu gesetzt. Damit ist das virtuelle Adresse -> physikalische Adresse für jeden Prozess anders. Und damit kannste auch deine ganze Segmentierung weglassen. btw. damit kann man auch bei nem Stack overflow ganz einfach den stack vergrößern.
-
Das klingt wirklich gar nicht so kompliziert.
Da werd ich mich ma mit beschäftigen.
thx für eure hilfe
-
Exact