阅读:1402回复:10
请教IDT的问题,一定给分!!每人20)
请教IDT的问题,一定给分!!每人20)
0000 IntG32 0008:80465946 DPL=0 P INTG32是什么意思?TASKG又是什么? DPL=0和DPL=3有什么区别? 把80465946修改为程序的EIP是不是就跳到指定程序? |
|
沙发#
发布于:2003-12-23 00:56
INTG32:中断门,
TASKG:任务门, DPL=0和DPL=3有什么区别:保护优先级,DPL=3的中断门可以供用户程序调用,也就是说DPL=3的级别最低 把80465946修改为程序的EIP是不是就跳到指定程序:不要乱改噢,狠容易会蓝屏的,不过如果修改的是用户模式的代码没关系啦最多给你一个对话框提示 |
|
板凳#
发布于:2003-12-23 10:39
TASKG是唯一可以存在于GDT,LDT,IDT中的。。。。。。
把80465946修改为程序的EIP是不是就跳到指定程序? 对,完全可以,你可以修改不过别忘了最后跳回原来的地方去,也可以添加自己的中断,我在黑客防线第10期杂志中的,XP内核DIY中,通过生成自己的INTGATE,可以在GDT上动态生成CALLGATE,从而可以在任意用户模式下直接进RING0,无须驱动。。。。。。 |
|
|
地板#
发布于:2003-12-23 11:19
我在驱动程序中修改到我的EIP,在SOFTICE中用IDT 命令可以看到改变了,但到不了中断程序。跟DPL为0 , 3有没有关系? 0008 是不是IRQ0,DPL为0,TASKG,能不能改?? 现在我只能给20分,我重开一帖给分好吗?? |
|
地下室#
发布于: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] |
|
|
5楼#
发布于:2003-12-23 15:48
我的中断程序在80000000H以上的系统地址空间,我修改DPL系统提示 STACUS_ACCESS_VIOLATION, 不知为什么? |
|
6楼#
发布于:2003-12-23 15:56
你的中断程序在80000000H以上的系统地址空间吗??如果有那就没问题,不然的话,恐怕是不行的 DPL = 3 是共享吗? 我怎么给记成0了... ...好象是说CPL = 3时 可以往 DPL = 0 的段里传,反之不行来着... ...我又记错乐.:-( 另外,请教一个小问题,IDT里的DPL是起什么作用的?因为里面有个 selector,它指向GDT或LDT里的一个表项,那里不也有一个DPL吗? 是不是这两个DPL需要保持一致呢? 我这样问主要是因为程序控制最终要往selector指向的那个段去, 所以CPU在执行权限检查时是不是应该以那个DPL为准呢? 谢谢.:-) |
|
|
7楼#
发布于: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] |
|
|
8楼#
发布于:2003-12-23 17:26
如何获得CPL(当前特权级Current Privilege level)? CPL与DPL(描述符特权级)必比较才决定执行与否? |
|
9楼#
发布于:2003-12-23 17:35
很简单,看见SELECTOR了吗??最低2位决定了RPL,CPL第3位是FLAG,0-GDT,1-LDT,高13位为描述符在描述符表内偏移,看看书吧,都很简单清楚的。。。。
|
|
|
10楼#
发布于:2003-12-23 20:37
一般存在的有CPL,RPL,DPL 感谢,明白了,看来又得从箱子底下吧那本Reference manual翻出来看看了,呵呵。 |
|
|