-
-
[求助]关于无驱动执行ring0代码的一个小问题?
-
发表于:
2009-3-25 00:20
4777
-
[求助]关于无驱动执行ring0代码的一个小问题?
for( cg=(CALLGATE_DESCRIPTOR *)((ULONG)BaseAddress+(gdt.Limit&0xFFF8));
(ULONG)cg>(ULONG)BaseAddress; cg-- )
{
if(cg->type == 0){
cg->offset_0_15 = LOWORD(Entry);
cg->selector = 8;
cg->param_count = 0;
cg->some_bits = 0;
cg->type = 0xC; // 386 call gate
cg->app_system = 0; // A system descriptor
cg->dpl = 3; // Ring 3 code can call
cg->present = 1;
cg->offset_16_31 = HIWORD(Entry);
setcg=TRUE;
break;
}
}
其中:BaseAddress是通过对"\\Device\\PhysicalMemory"进行映射得到的基地址。
我的几个小问题,请高手解答一下:
1、这段代码的意思是不是从GDT的最后一个描述符的位置开始,向前找,直到找到一个空闲的描述符位置?
2、\\Device\\PhysicalMemory首地址的就是GDT的基地址吗?
如果不是的话,为什么还直接用BaseAddress加上GDT的Limit
3、如果问题1正确的话,查找可用描述符位置为什么不用present而用type?
present不是表示是否使用吗?而type有很多不同的意思啊。。。
4、 cg->selector = 8 选择子的值为8指向的是哪个描述符?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!