Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: DeepDancer am 01. November 2009, 14:30

Titel: Ringe der CPU
Beitrag 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
Titel: Re: Ringe der CPU
Beitrag von: Jidder am 01. November 2009, 16:58
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.
Titel: Re: Ringe der CPU
Beitrag von: DeepDancer am 01. November 2009, 17:02
Ah, cool danke :)

Das bringt ne Menge Licht ins Dunkel ...


Titel: Re: Ringe der CPU
Beitrag von: XanClic am 01. November 2009, 19:57
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.
Titel: Re: Ringe der CPU
Beitrag von: SHyx0rmZ am 02. November 2009, 08:08
Es gibt ein Flag, mit dem man bestimmen kann, ob RDTSC auch im Usermode ausgeführt werden darf.