Autor Thema: Stack, Stack, Stack  (Gelesen 4373 mal)

bscreator

  • Gast
Gespeichert
« am: 07. July 2007, 13:50 »
Hi Leute,
erstmal danke, dass ihr mir bei meinem Bootloader geholfen habt. Endlich läuft er.
Jetzt hab ich ein paar Fragen zum Stack:
Da mein Bootloader Stack-Befehle im Real, als auch später im Protected Mode verwendet, hab ich einen Real-Mode-Stack und einen Protected Mode-Stack.
1. In welche Richtung "wächst" ein Real-Mode Stack gewöhnlich (werden die Adressen größer oder kleiner)? 
2. Wenn ein "alter" Real-Mode Stack bspw. bei Adresse 0x90000 liegt und wenig später ein Protected Mode Stack an genau derselben Adresse erstellt wird, wird dann nicht der alte Real-Mode-Stack überschrieben ?


kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 07. July 2007, 15:09 »
Auf x86 wachsen Stacks nach unten, die Adressen werden also kleiner.

Und wenn du den PM-Stack an dieselbe Adresse legst wie den RM-Stack, wird der RM-Stack selbstverständlich überschrieben. Aber macht das was? Brauchst du die Daten vom RM-Stack überhaupt noch oder ist das nicht sowieso Müll?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 09. July 2007, 14:04 »
Also mein Real-Mode-Stack wird mit folgendem Code erstellt:
mov ax,0x9000
mov ss,ax
mov sp,0
ES wird vorher auf 0 gesetzt. Somit befindet sich ja der Real-Mode-Stack an Adresse 0x9000.

Wird dieser Stack jetzt mit dem folgenden Protected-Mode-Stack
mov ax, datasel    ;Datenselektor in ds,es und ss laden
mov ds, ax
mov es, ax
mov ss, ax
mov esp, 0x90000
überschrieben ?

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 am: 09. July 2007, 15:30 »
Dein RM Stack befindet sich an 90000h. Dann springst du in den PM und setzt den Stack nach 90000h. Aber im PM gibt es ja keinen RM Stack mehr. Du brauchst also den vorherigen Stack nicht, da du ja jetzt im PM bist. In dem Stack stehen ja sowieso keine Daten mehr die du benötigst. Also kann es dir egal sein ob der Stack da ist wo er vorher im RM auch war.

bitmaster
In the Future everyone will need OS-64!!!

bscreator

  • Gast
Gespeichert
« Antwort #4 am: 09. July 2007, 16:22 »
Achso, stimmt. Ich glaub allerdings, dass ihr mich missverstanden habt. Mein Ziel ist ja, dass der "alte" Stack durch den "neuen" Stack ersetzt wird.

Noch ne Frage: Wenn ich meinen Bootloader mit dem folgenden Real-Mode-Stack
mov ax,0x9000
mov ss,ax
mov sp,0
"ausrüste", kommt bei Virtual PC ein schwarzer Bildschirm. VMWare allerdings lädt den Kernel ohne irgendwelche Komplikationen. Hat Virtual PC irgendwas gegen die Adresse 0x90000 ?

Gibt es sonst noch irgendwelche gängige bzw. geläufige Adressen (wie z.B. 0x90000), an die man seinen RM bzw. PM-Stack setzen sollte ?
« Letzte Änderung: 09. July 2007, 22:45 von bscreator »

 

Einloggen