Autor Thema: CPU Register auslesen  (Gelesen 3955 mal)

MrTom3715

  • Beiträge: 38
    • Profil anzeigen
Gespeichert
« 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

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 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).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #2 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 und hier ansehen.

MrTom3715

  • Beiträge: 38
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. January 2013, 21:30 »
Vielen Dank,
ich habe jetzt den CPU Zustand gesichert und kann jetzt die Werte abrufen.
Dankeschön :-)

MrTom3715

 

Einloggen