Taskwechsel auf CPL 3 = Prozessorfehler
-
Hallo zusammen,
Was ich machen möchte:
Von einer Task (CPL 0) in eine Task mit CPL3 wechseln mittels
JMP 0x20:123456Was ich erstellt habe:
GDT:
gdttabelle: ;0 dd 0 dd 0 CODE: ;8 dw 0xFFFF dw 0 ;wird zur Laufzeit eingetragen db 0 ;wird zur Laufzeit eingetragen db 11111010b db 11001111b ;DB und G Bit gesetzt db 0 DATEN: ;16 0x10 dw 0xFFFF dw 0 ;wird zur Laufzeit eingetragen db 0 ;wird zur Laufzeit eingetragen db 11110010b db 11001111b ;DB und G Bit gesetzt db 0 TMPTSS: ;24 ;0x18 dw 0x67 dw tmpbuffer dw 0x8900 dw 0 usertss1: ;32 0x20 dw 0x67 dw ITT dw 0x8900 dw 0
Bei dem Code- und Datensegment habe ich DPL auf 3 gestellt, damit alle darauf
zugreifen dürfen.
Das TSS in Zeile 21 wird nur temporär verwendet bis zum wechsel.TSS erstellt:
ITT: dw 0 ;Backlinkfeld dw 0 ;NULL dd 0x80000 ;ESP0 dw 0x10 ;SS0 dw 0 ;NULL dd 0 ;ESP1 dw 0 ;SS1 dw 0 ;NULL dd 0 ;ESP2 dw 0 ;SS2 dw 0 ;NULL dd 0 ;Cr3 = 0x21000 = 135 KByte .eip dd user2 ;EIP .eflag dd 0x3002 ;EFlag ;----- allgemeine Register dd 0 ;EAX dd 0 ;ECX dd 0 ;EDX dd 0 ;EBX dd 0x88000 ;ESP dd 0 ;EBP dd 0 ;ESI dd 0 ;EDI ;------- dw 0x13 ;ES dw 0 ; dw 0xB ;CS dw 0 ; dw 0x13 ;SS dw 0 ; dw 0x13 ;DS dw 0 ; dw 0x13 ;FS dw 0 ; dw 0x13 ;GS dw 0 ; dw 0 ;LDT Selektor dw 0 ;NULL dd 0 ;
Bei den EFlags habe ich IOPL auf 3 gestellt damit auch hier
keine Einschränkungen bestehen.Wenn ich in Zeile 28 CS auf 0x8 umschreibe funktioniert auch alles.
Andernfalls kommt der Prozessorfehler.Was habe ich denn vergessen?
Gruß, Nicky
-
0x8 (wie im Text) oder 0xB (wie im Code)?
-
Hallo Mr X,
ich verstehe die Frage nicht
Nicky
-
Dein Fehler ist vermutlich, dass dein Code-Segment als DPL 0 hat und dementsprechend kein Zugriff darauf gegeben wird, wenn der RPL des Code-Segments 0x3 ist. Normalerweise hat man fuer User- und Kernelmode sowieso verschiedene GDT-Eintraege, einmal DPL 0 und einmal DPL 3, auch, wenn Limit, Base etc. gleich ist.
EDIT: Wenn du bei uns in den IRC kommen wuerdest, koennten wir Fragen, sofern nicht alle AFK sind, auch zeitnaher beantworten, als es hier im Forum moeglich ist.
-
Nun habe ich für DPL 0 und DPL 3 jeweils ein Code und Datensegment erstellt.
LäuftGruß, Nicky