Lowlevel
Lowlevel => Softwareentwicklung => Thema gestartet von: MrTom3715 am 08. January 2013, 18:46
-
Hallo,
ich bin gerade dabei mein "Bluescreen" zu programmieren.
Eax, ebx, ecx, edx, esi und edi kann ich schon in eine Variable schreiben und diese ausgeben.
Wie mache ich das aber nun mit ebp, eip, esp, cs, ss und Flags?
Eax wird ja so ausgelesen:
asm volatile ("inb %%dx, %%al" : "=a" (n) : );
Wie muss ich den Ausgabeparameter ändern um ebp, eip, esp, cs, ss und Flags in die Variable n zu schreiben.
Ändert das Verfahren, das ich oben angewendet habe, auch die Register?
MrTom3715
-
Du willst nicht die Registerwerte ausgeben, die zufällig gerade mitten in der Panic-Funktion aktuell sind, sondern die Registerwerte von der Exception. Die hast du hoffentlich vorher in deinem Assembler-Stub für die Interrupthandler irgendwohin gesichert (z.B. auf den Stack).
-
Da hat kevin natürlich Recht, die aktuellen Werte sind ja im Bezug auf den Fehler, der auftrat, völlig irrelevant.
Wie man elegant an die richtigen Werte kommt, kann man sich hier (http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/int_stub.S;h=e08236ea967e959a42bc9bf05042fd8c7786640d;hb=HEAD) und hier (http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/intr.c;h=ee353b47a1613c72dcece0ddf2f53cf322d9dd5f;hb=HEAD#l203) ansehen.
-
Vielen Dank,
ich habe jetzt den CPU Zustand gesichert und kann jetzt die Werte abrufen.
Dankeschön :-)
MrTom3715