Wie kann ich programmgesteuert erkennen, in welcher ring (-1, 0, 1, 2, 3) ich bin laufen?

StackOverflow https://stackoverflow.com/questions/1086722

  •  23-08-2019
  •  | 
  •  

Frage

Wie kann ich programmgesteuert erkennen, in welcher ring (-1, 0, 1, 2, 3) ich bin laufen?

War es hilfreich?

Lösung

Der einfachste Weg ist, einfach ausführen (x86) - Befehl und fangen Sie die entsprechenden Fehler aus.

E. g.(SEH -, Windows-kernel-Modus)

bool ring_lower_0 = false;
__try
{
    __asm { <cmd> };
    ring_lower_0 = true;
}
__except( GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION )
{
    ring_lower_0 = false;
}

Hinweise:

cmd, ist ein assembler-Befehl.Finden Sie in der Intel-Architektur Referenzhandbuch für eine Liste der Befehle und Ihre entsprechenden Ring Ebenen.

Linux hat ein etwas anderes Konzept.

Aber denken Sie daran, dass die VMs auf einer niedrigeren Ebene-Maske das Ergebnis durch die Emulation der Anruf.

(NB:Die Aufgabe des VM ist zu übersetzen: ungültige Anweisung in eine sinnvolle Anruf)


Wenn Sie wirklich wollen, um zu überprüfen, ob Ihre virtualisierten und möchten, beenden Sie die Ausführung, weil dieser, sollten Sie Lesen, was geschrieben wurde über die 'Rote Pille'.

Andere Tipps

Es sei denn, du bist ein Gerätetreiber, Sie werden immer ausgeführt werden, in Ring 3 (für Systeme, die "Ringe", per se).

Normalerweise würde ich schreiben, die Sie Lesen sollten, über den "geschützten Modus Programmierung".Es ist ein Artikel darüber, wie Sie intertact mit ring-0) mit windows XP SP2.Beachten Sie, dass es wird sich ändern, für andere windows-Versionen und für sicher, dass andere Betriebssysteme.

http://www.codeproject.com/KB/threads/MinimalisticRingZero.aspx

Wenn Sie wollen einfach nur, um zu erkennen, ob Sie die Ausführung in einer virtuellen Maschine, um zu vermeiden, dass Menschen die Anwendung Debuggen, zum Beispiel, können Sie hier prüfen:

http://www.codeproject.com/KB/system/VmDetect.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top