ZHULUSHENG
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1404回复:10

请教IDT的问题,一定给分!!每人20)

楼主#
更多 发布于:2003-12-22 21:11
请教IDT的问题,一定给分!!每人20)
0000  IntG32  0008:80465946   DPL=0  P
INTG32是什么意思?TASKG又是什么?
DPL=0和DPL=3有什么区别?
把80465946修改为程序的EIP是不是就跳到指定程序?
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-23 20:37
一般存在的有CPL,RPL,DPL
RPL为选择子的DPL,在访问段的时候需要与被访问段DPL比较,数值上小于即可访问,还有CPL为CS,SS的RPL,这2个必须一致,你可以参考INTEL IA32 SOFTWARE DEVELOPER MANUAL VOL3,当然最新的AMD64手册中也有说明
记住一个原则
RING3代码段只能访问RING3数据段
RING0代码段可以访问,RING0,RING3数据段
RING3-》RING0通过门 (CALL FAR,INT)
RING0-》RING3通过相应的返回(RETF,IRETD)
RING0代码段一般CALL RING0代码段
RING3代码段一般CALL RING3代码段
要共享代码段,则可以共享DPL 为0的一致代码段
且在各自的特权级运行
RING3的一致代码段只能为RING3代码段调用,不能RING0调用,不然就GP,以上的我都做过测试的,可以作为一般的准则
还有在P2级别以后,INTEL引入了SYSENTER,SYSEXIT来进行切换
对应于AMD的SYSCALL,SYSRET,所以XP就是采用了这个方式进入系统服务的,而不是2000的INT2EH,在AMD最新的AMD64中已经直接支持了这2个,可能为了和INTEL兼容,看来AMD64是个不错的选择,嘿嘿。。。。。

[编辑 -  12/23/03 by  wowocock]


感谢,明白了,看来又得从箱子底下吧那本Reference manual翻出来看看了,呵呵。
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2003-12-23 17:35
很简单,看见SELECTOR了吗??最低2位决定了RPL,CPL第3位是FLAG,0-GDT,1-LDT,高13位为描述符在描述符表内偏移,看看书吧,都很简单清楚的。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
ZHULUSHENG
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-23 17:26

如何获得CPL(当前特权级Current Privilege level)?
CPL与DPL(描述符特权级)必比较才决定执行与否?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2003-12-23 17:26
一般存在的有CPL,RPL,DPL
RPL为选择子的DPL,在访问段的时候需要与被访问段DPL比较,数值上小于即可访问,还有CPL为CS,SS的RPL,这2个必须一致,你可以参考INTEL IA32 SOFTWARE DEVELOPER MANUAL VOL3,当然最新的AMD64手册中也有说明
记住一个原则
RING3代码段只能访问RING3数据段
RING0代码段可以访问,RING0,RING3数据段
RING3-》RING0通过门 (CALL FAR,INT)
RING0-》RING3通过相应的返回(RETF,IRETD)
RING0代码段一般CALL RING0代码段
RING3代码段一般CALL RING3代码段
要共享代码段,则可以共享DPL 为0的一致代码段
且在各自的特权级运行
RING3的一致代码段只能为RING3代码段调用,不能RING0调用,不然就GP,以上的我都做过测试的,可以作为一般的准则
还有在P2级别以后,INTEL引入了SYSENTER,SYSEXIT来进行切换
对应于AMD的SYSCALL,SYSRET,所以XP就是采用了这个方式进入系统服务的,而不是2000的INT2EH,在AMD最新的AMD64中已经直接支持了这2个,可能为了和INTEL兼容,看来AMD64是个不错的选择,嘿嘿。。。。。

[编辑 -  12/23/03 by  wowocock]
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-23 15:56
你的中断程序在80000000H以上的系统地址空间吗??如果有那就没问题,不然的话,恐怕是不行的
最好设定DPL为3这样可以为0,3共享
0008 为系统RING0代码段,DPL为0,基地址0,界限4GB
0010 为系统RING0数据段,DPL为0,基地址0,界限4GB

001B 为系统RING3代码段,DPL为3,基地址0,界限4GB
0023 为系统RING3数据段,DPL为3,基地址0,界限4GB

0028为系统状态段TSS
0030为系统SEH,系统RING0


[编辑 -  12/23/03 by  wowocock]

[编辑 -  12/23/03 by  wowocock]


DPL = 3 是共享吗? 我怎么给记成0了... ...好象是说CPL = 3时
可以往 DPL = 0 的段里传,反之不行来着... ...我又记错乐.:-(

另外,请教一个小问题,IDT里的DPL是起什么作用的?因为里面有个
selector,它指向GDT或LDT里的一个表项,那里不也有一个DPL吗?
是不是这两个DPL需要保持一致呢?

我这样问主要是因为程序控制最终要往selector指向的那个段去,
所以CPU在执行权限检查时是不是应该以那个DPL为准呢?

谢谢.:-)
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
ZHULUSHENG
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-23 15:48

我的中断程序在80000000H以上的系统地址空间,我修改DPL系统提示
STACUS_ACCESS_VIOLATION, 不知为什么?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2003-12-23 14:53
你的中断程序在80000000H以上的系统地址空间吗??如果有那就没问题,不然的话,恐怕是不行的
最好设定DPL为3这样可以为0,3共享
0008 为系统RING0代码段,DPL为0,基地址0,界限4GB
0010 为系统RING0数据段,DPL为0,基地址0,界限4GB

001B 为系统RING3代码段,DPL为3,基地址0,界限4GB
0023 为系统RING3数据段,DPL为3,基地址0,界限4GB

0028为系统状态段TSS
0030为系统SEH,系统RING0


[编辑 -  12/23/03 by  wowocock]

[编辑 -  12/23/03 by  wowocock]
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
ZHULUSHENG
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-23 11:19


我在驱动程序中修改到我的EIP,在SOFTICE中用IDT 命令可以看到改变了,但到不了中断程序。跟DPL为0 , 3有没有关系?
 
0008 是不是IRQ0,DPL为0,TASKG,能不能改??

现在我只能给20分,我重开一帖给分好吗??
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2003-12-23 10:39
TASKG是唯一可以存在于GDT,LDT,IDT中的。。。。。。
把80465946修改为程序的EIP是不是就跳到指定程序?
对,完全可以,你可以修改不过别忘了最后跳回原来的地方去,也可以添加自己的中断,我在黑客防线第10期杂志中的,XP内核DIY中,通过生成自己的INTGATE,可以在GDT上动态生成CALLGATE,从而可以在任意用户模式下直接进RING0,无须驱动。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
reayi
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2010-03-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-23 00:56
INTG32:中断门,
TASKG:任务门,
DPL=0和DPL=3有什么区别:保护优先级,DPL=3的中断门可以供用户程序调用,也就是说DPL=3的级别最低

把80465946修改为程序的EIP是不是就跳到指定程序:不要乱改噢,狠容易会蓝屏的,不过如果修改的是用户模式的代码没关系啦最多给你一个对话框提示
游客

返回顶部