首页
社区
课程
招聘
[求助]windows下CS还是不是段选择子?为何总是固定值?
发表于: 2010-4-13 23:03 6429

[求助]windows下CS还是不是段选择子?为何总是固定值?

2010-4-13 23:03
6429
在“rootkit ring3 进 ring0 之门系列[一] -- 调用门”里看到这句话“windows ring3 下cs 是 0x1b , ring0 下cs 通常是 0x08”,正好最近在学微机原理,也碰到这个问题,就是1B=00011011,倒数两位是RPL=3没问题,但是倒数第三位为0说明是GDT,当时问老师为什么不是指向LDT的1而是指向GDT的0,老师也说不清,然后回去又用OD附加了几个程序,结果都是CS=0x1B,写驱动读CS是0x08,和这篇文章里说的一样,想问下0x1B是windows规定的还是另有原因呢?CS到底是不是起到段选择子的作用?~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 75
活跃值: (723)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
cs fs ds 这些16位寄存器 保存的都是 选择码
选择码的格式,
bit0~bit1 运行级别
bit2 采用ldt/GDT ,为1则是ldt
bit3~bit15 是 对应IDT/GDT数组的下标,指向某一段描述符,

系统定义GDT[3]保存用户空间cs段描述符,GDT[1]保存内核空间cs段描述符号,那么通过上面的组合,可以得到
ring3 cs = 0x1b ring 0 cs = 0x08

应该没说错吧
2010-4-14 00:43
0
雪    币: 463
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=skypismire;790644]cs fs ds 这些16位寄存器 保存的都是 选择码
选择码的格式,
bit0~bit1 运行级别
bit2 采用ldt/GDT ,为1则是ldt
bit3~bit15 是 对应IDT/GDT数组的下标,指向某一段描述符,

系统定义GDT[3]保存用户空间cs段描述符,GDT[1]保...[/QUOTE]

soga,谢谢你的回答啦~~

还想问一下,系统中只有一个GDT,如果多个进程都用了这个GDT里的GDT[3],那不就存在进程空间基址相同的情况了吗?
2010-4-14 12:35
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=garyzjq;790806]soga,谢谢你的回答啦~~

还想问一下,系统中只有一个GDT,如果多个进程都用了这个GDT里的GDT[3],那不就存在进程空间基址相同的情况了吗?[/QUOTE]

分段机制 分的是4GB空间啊, 也就是说分段机制 仅仅是为了指令而准备的
(比如 mov eax,123) 这里的123 就是ds的基质的偏移。

而4GB空间是有分页决定的, 转换123这个地址的时候是看cr3寄存器里面对应的目录进行转换的,所以不同进程的cr3 不同 内容也就不同。

QQ293596479  (+我请叫我六道骸)
2010-4-14 15:34
0
雪    币: 463
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哦,明白了,要学的东西好多啊~谢谢啦~~
2010-4-14 17:13
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
cs的基地址是相同的阿,都是400000,所以所有的cs的描述符都相同,似乎应该是这个样子吧
2010-5-4 16:08
0
游客
登录 | 注册 方可回帖
返回
//