Task & DPL3
Posted: Tue Mar 29, 2005 6:04 am
Hello, i have problems running a task within ring3.
When i jump in segment 0x20 i get exception 0.
But when i change the descriptor 0x38 & 0x40 to dpl0 i dont get an exeption. Pls Help !
Code: Select all
SetGdtEntry(0,0,0,0,0); // 0x00
SetGdtEntry(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); // 0x08
SetGdtEntry(2, 0, 0xFFFFFFFF, 0x92, 0xCF); // 0x10
SetGdtEntry(3, 0x0B8000, 0x0FFFFF, 0x92, 0xCF); // 0x18
SetGdtEntry(4, &tss[0], sizeof(struct TSS), 0x89, 0x5F); // 0x20
SetGdtEntry(5, &tss[1], sizeof(struct TSS), 0x89, 0x5F); // 0x28
SetGdtEntry(6, &tss[2], sizeof(struct TSS), 0x89, 0x5F); // 0x30
SetGdtEntry(7, 0, 0xFFFFFFFF, 0xFA, 0xCF); // 0x38 code / dpl3
SetGdtEntry(8, 0, 0xFFFFFFFF, 0xF2, 0xCF); // 0x40 data / dpl3
tss[[0]].EFlags = 0x202;
tss[[0]].Cs = 0x38;
tss[[0]].Ss = 0x40;
tss[[0]].Esp = 0x95000;
tss[[0]].Ds = 0x40;
tss[[0]].Eip = &task;
tss[[0]].Trace = 0;
tss[[0]].IoMap = sizeof(struct TSS);
void task()
{
for (;;);
}
void main()
{
ReprogramPics();
SetupGdt();
asm("ljmp 0x20,0\n");
for (;;);
}
But when i change the descriptor 0x38 & 0x40 to dpl0 i dont get an exeption. Pls Help !