Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: DeepDancer am 01. November 2009, 14:30
-
Ahoi zusammen :)
Ich beschäftige mich gerade mit den Ringen der X86-CPU und wollt mal nachfragen ob es irgendwo ne schicke Übersicht gibt, welche Befehle von Ring 0 bis Ring 3 denn jeweils nicht mehr funktionieren.
Das ist zwar alles recht schickt in der Intel-Docu beschrieben, aber nicht wirklich übersichtlich wie ich finde und es ist dann doch bissi anstrengend das alles rauszufrickeln.
Gibts da schon was oder hat sich die Mühe noch niemand gemacht?
Danke und Grüße,
Deep
-
Ja, die gibts es in den Intel Manuals. Diese hier funktionieren nur in Ring 0 (Aus Volume 3A, Kapitel 4.9 Privileged Instructions):
•LGDT — Load GDT register.
•LLDT — Load LDT register.
•LTR — Load task register.
•LIDT — Load IDT register.
•MOV (control registers) — Load and store control registers.
•LMSW — Load machine status word.
•CLTS — Clear task-switched flag in register CR0.
•MOV (debug registers) — Load and store debug registers.
•INVD — Invalidate cache, without writeback.
•WBINVD — Invalidate cache, with writeback.
•INVLPG —Invalidate TLB entry.
•HLT— Halt processor.
•RDMSR — Read Model-Specific Registers.
•WRMSR —Write Model-Specific Registers.
•RDPMC — Read Performance-Monitoring Counter.
•RDTSC — Read Time-Stamp Counter.
Die einzigen, die ich in dieser Liste vermisse, sind SYSEXIT und SYSRET, die ebenfalls nur in Ring 0 ausgeführt werden können.
Alle anderen Instruktionen können in allen Ringen ausgeführt werden, eventuell mit Ausnahme von SYSENTER und SYSCALL, die glaub ich nur in Ring 3 funktionieren.
-
Ah, cool danke :)
Das bringt ne Menge Licht ins Dunkel ...
-
Also, ich muss sagen, dass ich rdtsc auch im Usermode ausführen kann... Weiß nicht, ob Linux da irgendwas besonders macht, aber es gab zumindest keinen Segmentation Fault.
Außerdem sollten die Befehle in allen Ringen möglich sein, deren Wert kleiner oder gleich dem Wert des IOPL-Feldes ist, was man auch noch sagen könnte.
-
Es gibt ein Flag, mit dem man bestimmen kann, ob RDTSC auch im Usermode ausgeführt werden darf.