首页
社区
课程
招聘
[求助]关于无驱动执行ring0代码的一个小问题?
发表于: 2009-3-25 00:20 4767

[求助]关于无驱动执行ring0代码的一个小问题?

2009-3-25 00:20
4767
    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指向的是哪个描述符?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那位高手给解答一下,期待中!
2009-3-25 14:10
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那位高手给解答一下,期待中!
2009-3-25 14:10
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
希望有高手解释一下,期待中!
2009-3-25 14:11
0
雪    币: 238
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
2009-3-27 12:37
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不懂,帮lz顶上去,看lz顶的很辛苦
2009-3-27 12:40
0
游客
登录 | 注册 方可回帖
返回
//