Autor Thema: Code-Segment ansprechen führt zu Neustart  (Gelesen 3272 mal)

xor

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« am: 14. January 2005, 09:13 »
Moin.

Ich habe mal das PMode-Tutorial von Gregor Brunmar auf osdever.net ausprobiert
( http://www.osdever.net/tutorials/brunmar/tutorial_02.php?the_id=18 )  und bin auf das Problem gestoßen, daß sich, nach dem die 16-bit pipe gecleared wird, der Rechner (bzw. Bochs) beim Setzen des Codesegmentes auf 0x8 regelmäßig neustartet. Im Realmode wurde der Kernelcode auf 0x1000 geladen, und sollte sich ja somit in CS:1000h befinden.
Also müsste er im Realmode mit 8h:1000h ansprechbar sein.
Dennoch habe ich das Gefühl, daß ich das Codesegment auf eine falsche Adresse setze.
Vielleicht hat sich ja mal jmd. dieses Tutorial im Laufe seiner eigenen Studien angesehen, und kann mir einen Tipp geben.

Mfg

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #1 am: 14. January 2005, 16:09 »
ich hatte das gleiche problem. schau dir mal GhostCoder's bootloader an, da ist das problem gelöst. ich hab einfach die gesamte routine von mir noch mal neu geschrieben, dann hats gefunzt

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 14. January 2005, 20:07 »
Auch hier kann ich nur raten mal den Debug-Modus von Bochs zu benutzen.
Damit kann man feststellen ob bereits beim Sprung in den PMode neustartet oder erst danach.

Solltes es bereits beim Jump passieren ist wohl der Descriptor falsch. Ansonsten springt er wohl an eine Stelle an der ein Befehl steht mit dem er nix anfangen kann.
----------------------
Redakteur bei LowLevel

xor

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 15. January 2005, 21:48 »
Da der Eintritt in den PM erfolgreich zu sein scheint, was ich daran erkenne, daß ich in den Videospeicher nach dem Eintritt in PM schreiben kann, scheint wohl der IP wohl auf einen ungültigen Befehl zu zeigen. Muss erst noch mal Bochs mit debugging-Unterstützung kompilieren, dann sehe ich weiter.

Mfg

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 16. January 2005, 10:15 »
Das im Bochs ein Zeichen erscheint muss leider keinen erfolg bedeuten. Habs schon oft erlebt das, obwohl ein Fehler auftrat der Code danach auch ausgeführt wurde. Erst etwas später startet Bochs dann neu. Hab das sogar mit absichtlich eingebauten Fehlern getestet.^^
Am besten hinter verdächtige stellen jmp $ schreiben, also eine Endlos schleife, wenn er dann stehen bleibt, ohne das er neustartet ist der Bereich in Ordnung. So braucht man den Debugmode nicht unbedingt, ist zwar etwas umständlicher aber geht auch.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

xor

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 18. January 2005, 11:53 »
Ich hatte zwar die letzten Tage keine Zeit mich mit dem Problem zu beschäftigen, aber ich glaube ich werde mir noch mal die Größe der Deskriptoren in der GDT ansehen -  es kann sein, daß ich einen den Deskriptor für das Nullsegment ungleich 8 Byte angelegt habe. Dies würde einen Sprung zu einer undefinierten/unerwünschten Codestelle im Codesegment ermöglichen und somit den Ablauf stören, da ich ja den falschen Opcode erwischen würde.

 

Einloggen