Lowlevel

Lowlevel => Softwareentwicklung => Thema gestartet von: MrTom3715 am 08. January 2013, 18:46

Titel: CPU Register auslesen
Beitrag 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
Titel: Re: CPU Register auslesen
Beitrag von: kevin am 08. January 2013, 19:52
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).
Titel: Re: CPU Register auslesen
Beitrag von: TheThing am 08. January 2013, 21:00
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.
Titel: Re: CPU Register auslesen
Beitrag von: MrTom3715 am 08. January 2013, 21:30
Vielen Dank,
ich habe jetzt den CPU Zustand gesichert und kann jetzt die Werte abrufen.
Dankeschön :-)

MrTom3715