2011-01-08 3 views
1

Die meisten modernen Betriebssysteme werden im geschützten Modus ausgeführt. Jetzt ist es möglich, dass die Benutzerprogramme den "Ring 0" eingeben, indem sie die entsprechenden Bits in einigen Steuerregistern direkt setzen. Oder muss es durch irgendeinen Systemaufruf gehen.Eingabe von 0 aus dem Benutzermodus

Ich glaube, auf die Hardware zuzugreifen, die wir durch das Betriebssystem gehen müssen. Aber wenn wir die Adresse des Hardwaregeräts kennen, können wir einfach einen Assemblersprachencode mit Bezug auf den Standort des Geräts schreiben und darauf zugreifen. Was passiert, wenn wir die Adresse eines Hardwaregeräts im Assemblersprachcode angeben?

Danke.

Antwort

2

Um Ring 0 einzugeben, müssen Sie einen Systemaufruf ausführen, und das System steuert von Grund auf, wohin Sie gehen, weil Sie für den Aufruf einfach einen Index an die CPU geben und die CPU in eine Tabelle schaut was zu nennen. Sie können den Sicherheitsaspekt (offensichtlich) nicht wirklich umgehen, um etwas anderes zu tun, aber vielleicht hilft .

+0

Danke für die Antwort. Ich habe die Seite gelesen, auf der der Autor schreibt: "Wir lesen Global Descriptor Table und schreiben die Adresse unserer Funktion auf die erste freie Stelle + gewünschten Ringlevel zurück." Ich habe es nicht bekommen, wenn er sagen will, wir schreiben an die GDT oder irgendwo anders. Können wir aus dem Benutzermodus (Ring 3) in den GDT schreiben. – yaami

+0

Auch konnte ich nicht finden, wo der Code in Ring 0 eintritt. Ich könnte den Übergang von Ring-0 zu Ring-3 finden. aber nicht umgekehrt. Beginnt der Code in Ring 0 direkt oder gibt er irgendwann Ring 0 ein, wenn ja, kannst du mir zeigen wo im Code wir Ring 0 eingeben. - Danke – yaami

+0

Sorry found it. Soweit ich das beurteilen konnte, ruft code eine Funktion an, die in Ring 0 (mit callGates) laufen kann. Ist es richtig ... korrigiere mich, wenn ich falsch liege. Danke – yaami

2

Sie können das Betriebssystem bitten, den Speicher des Hardwaregeräts in den Speicherplatz Ihres Programms zu mappen. Sobald dies erledigt ist, können Sie diesen Speicher einfach aus Ring 3 lesen und schreiben. Ob dies möglich ist oder wie das gemacht wird, hängt vom Betriebssystem oder dem Gerät ab.

2
; set PE bit 
mov cr0, eax 
or eax, 1 
mov eax, cr0 
; far jump (cs = selector of code segment) 
jmp cs:@pm 

@pm: 
; Now we are in PM 

Aus Wikipedia.

Grundidee ist, einzustellen (auf 1) 0ten Bit in CR0 Steuerregister.

Aber wenn Sie bereits im geschützten Modus sind (d. H. Sie sind in Windows/Linux), beschränkt Sicherheit Sie dazu (Sie sind in Ring 3 - niedrigste Vertrauenswürdigkeit).

Seien Sie also der Erste, der in den geschützten Modus gelangt.