Autor Thema: Ringe der CPU  (Gelesen 2626 mal)

DeepDancer

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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 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.
Dieser Text wird unter jedem Beitrag angezeigt.

DeepDancer

  • Beiträge: 58
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. November 2009, 17:02 »
Ah, cool danke :)

Das bringt ne Menge Licht ins Dunkel ...



XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #3 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.

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. November 2009, 08:08 »
Es gibt ein Flag, mit dem man bestimmen kann, ob RDTSC auch im Usermode ausgeführt werden darf.
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

 

Einloggen