首页
社区
课程
招聘
[旧帖] 对于CPL,RPL,DPL的新疑惑 0.00雪花
发表于: 2010-10-27 13:40 3854

[旧帖] 对于CPL,RPL,DPL的新疑惑 0.00雪花

2010-10-27 13:40
3854
只谈代码段:
网上有关于CPL, DPL, RPL的很多解释,但我还是有一些疑惑:
1. RPL的调整是CPU进行的?还是操作系统?还是程序员?
2. CPL到底保存在哪里?CS寄存器(物理角度)的[1:0]位?
3. 和2相关的问题就是,RPL到底保存在哪里?在代码中,选择子一般是个常量,包含了索引值及TI位,但并没有指定RPL,在转移的时候,类似于这样的指令,jmp selector:offset,那么RPL在哪里呢?是不是有一块大小和选择子一样的内存被分配,然后填入索引,TI位,并且写入RPL,然后才执行验证?
4. 我在看杨继文的书时,里面对于向目标代码段转移的步骤有如下的描述:
        a. 判断是否为空描述符
        b. 从全局/局部描述符表内读出描述符(已经读出了描述符!!!)
        c. 根据情况,检测描述符类型是否正确;调整RPL        d. 装载至CS告诉缓冲寄存器
        e. ......
        f. ......
我的疑问是第C步骤,根据什么情况?检测什么类型?如何调整RPL?
5. 在程序运行的任何时刻,各个段寄存器里的低2位是不是没有什么用途(除了CS[1:0],如果CPL是保存在那里的话),因为在转移的时候,需要的是CPL,在某个位置存在的RPL和目标段的DPL?
很多问题,期待前辈能予以解答,严重迷惑中...
谢谢!!

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 273
活跃值: (64)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
1:RPL是PE加载程序时完成的 DPL是系统内核加载时初始化完成的
2:CPL在CS寄存器中,当选择子成功装入CS寄存器后,相应的选择子中的RPL就变成了CPL
3:RPL在段选择子的低两位,你看一下CS DS FS 段寄存器的低两位总是3
4:比较的时候即比较CPL也比较RPL
2010-10-27 17:35
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
只有中断、异常、远转移才进行特权检测,当然访问数据(段选择子:[偏移])也要特权检测,建议看Intel手册。
2010-10-28 10:13
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢各位了,大概明白了些。
赏金如何给?
2010-10-28 15:11
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
路过学习一下!!
2010-10-28 15:27
0
游客
登录 | 注册 方可回帖
返回
//