How I can swith into CPL=3 ?
Posted: Tue Nov 29, 2005 7:48 am
Code: Select all
tss->back_link=0x20;
tss->ESP0=0x3000;
tss->SS0=0x10;
tss->ESP1=0;
tss->SS1=0x0;
tss->ESP2=0;
tss->SS2=0x0;
tss->CR3=0;
tss->EIP=&qq;
tss->EFLAGS=0x3202;
?????? ???
tss->EAX=0;
tss->ECX=0;
tss->EDX=0;
tss->EBX=0;
tss->ESP=0x2000;
tss->EBP=0;
tss->ESI=0;
tss->EDI=0;
tss->ES=0x33;
tss->CS=0x2b;
tss->SS=0x33;
tss->DS=0x33;
tss->FS=0x0;
tss->GS=0x0;
tss->LDT=0;
tss->offset_andT=0;
tss->IOPB=0xFFFFFFFF;
tss->CR3=page_directory2;
tss2->back_link=0x20;
tss2->ESP0=0x5000;
tss2->SS0=0x10;
tss2->ESP1=0;
tss2->SS1=0x0;
tss2->ESP2=0;
tss2->SS2=0x0;
tss2->CR3=0;
tss2->EIP=&qq2;
tss2->EFLAGS=0x3202;???
tss2->EAX=0;
tss2->ECX=0;
tss2->EDX=0;
tss2->EBX=0;
tss2->ESP=0x4000;
tss2->EBP=0;
tss2->ESI=0;
tss2->EDI=0;
tss2->ES=0x33;
tss2->CS=0x2b;
tss2->SS=0x33;
tss2->DS=0x33;
tss2->FS=0x0;
tss2->GS=0x0;
tss2->LDT=0;
tss2->offset_andT=0;
tss2->IOPB=0x3;
tss2->CR3=page_directory2;
Code: Select all
gdt[0]=0; // not used
gdt[1]=0;
gdt[2]=0x00000025; // code
gdt[3]=0x00CF9A00;
gdt[4]=0x00000025; // data
gdt[5]=0x00CF9200;
gdt[6]=((TSS_KERNEL_MAIN<<16)&0xFFFF0000)|((sizeof(struct TSS))&0x0000FFFF);
gdt[7]=(TSS_KERNEL_MAIN&0xFF000000)|0x8900|((TSS_KERNEL_MAIN>>16)&0x000000FF);
// TSS kernel
gdt[8]=((TSS_APP<<16)&0xFFFF0000)|((sizeof(struct TSS))&0x0000FFFF);
gdt[9]=(TSS_APP&0xFF000000)|0xE900|((TSS_APP>>16)&0x000000FF);
//u
gdt[10]=((mem_size)/4096/0x10); // code 28
gdt[11]=0x00CFFA00;
gdt[12]=((mem_size)/4096/0x10); // data 30
gdt[13]=0x00CFF200;
gdt[14]=((TSS_APP2<<16)&0xFFFF0000)|((sizeof(struct TSS))&0x0000FFFF);
gdt[15]=(TSS_APP2&0xFF000000)|0xE900|((TSS_APP2>>16)&0x000000FF);
// TSS app
g_gdtr[0]=(GDT_MAIN<<16)|0xFFFF;
g_gdtr[1]=(GDT_MAIN>>16)&0xFFFF;
gdt_flush();
asm("lgdt g_gdtr");
What am I doing wrong ?
P.S.
Sorry for my English
[edit] use the [ code ] - tags [/edit]