能力值:
( 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
应该没说错吧
|
能力值:
( 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],那不就存在进程空间基址相同的情况了吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=garyzjq;790806]soga,谢谢你的回答啦~~
还想问一下,系统中只有一个GDT,如果多个进程都用了这个GDT里的GDT[3],那不就存在进程空间基址相同的情况了吗?[/QUOTE]
分段机制 分的是4GB空间啊, 也就是说分段机制 仅仅是为了指令而准备的
(比如 mov eax,123) 这里的123 就是ds的基质的偏移。
而4GB空间是有分页决定的, 转换123这个地址的时候是看cr3寄存器里面对应的目录进行转换的,所以不同进程的cr3 不同 内容也就不同。
QQ293596479 (+我请叫我六道骸)
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
哦,明白了,要学的东西好多啊~谢谢啦~~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
cs的基地址是相同的阿,都是400000,所以所有的cs的描述符都相同,似乎应该是这个样子吧
|
|
|