• 全部
  • 问答

WINDOWS下的gdt和ldt

SGYHMSLY 2007-04-13 08:57:52
是这样的,我想问下Windows 在Intel Protection Mode下工作的问题。
在指令手册第三卷system programming 可以看到,通常GDT只有一个,而LDT可以有很多的。
本来我很天真地想:
那么我又多少个进程在running 就应该有多少个LDT才对。
于是我打开softice, 输入GDT
结构只有一个被标为LDT,参考了using softice,只看到如下一段:
Under Winnt , LDT are per process data structures and are only used for virtual dos machines.
The 16 bit WOW box is executed within a NTVDM process and has an LDT.
Like Windows 3.1 the LDT for a WOW contains the selectors for every 16 bit proteced mode code and data segment for each 16 bit application or DLL that is loaded. It also contains the selectors for each task database, module database, local heaps, global allocation, and all USER and GDI objects that require the creation of a selector. Under a WOW, because the number of selectors needed can be quite large, a full LDT is created with a majority of the entries initially reserved. These reserved selectors are allocated as needed. Under a non-WOW VDM, the size of the LDT is significant smaller.

老实说我不知道它在说什么,最后的结果就是我只能看到一个LDT.
这实在太奇怪了,请问难道windows不用LDT?

第二个奇怪的是
GDTbase=80036000 Limit=03FF
0008 Code32 Base=00000000 Lim=FFFFFFFF DPL=0 P R
0010 Data32 Base=00000000 Lim=FFFFFFFF DPL=0 P R
001B Code32 Base=00000000 Lim=FFFFFFFF DPL=3 P R
0023 Data32 Base=00000000 Lim=FFFFFFFF DPL=3 P R
0028 TSS32 Base=8000B000 Lim=000020AB DPL=0 P B
0030 Data32 Base=FFDFF000 Lim=00001FFF DPL=0 P R
003B Data32 Base=7FFDE000 Lim=00000FFF DPL=3 P R
0043 Data16 Base=00000400 Lim=0000FFFF DPL=3 P R
0048 LDT Base=E156C000 Lim=0000FFEF DPL=0 P

显然code32 data32也就是从0008-001b
这段是固定的,所谓的flat mode,可是真的不明白,
明明规定4g地址只有低2g空间是用户可以访问的。
高2G操作系统用,也就是ring0才能访问。
那么这里有两个Code32,一个是ring3(0008),一个是ring0(001B)
那么同一句汇编指令,访问32位偏移0xYYYYYYYY地址,
操作系统怎么知道是访问上面那个还是下面那个,
有两个段,这两个段根本都覆盖了4g空间,却具有不同的权限,dpl 不同,
同一个地址到底要怎么解释呢?

晕眩。
...全文
378 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Nixom 2007-04-20
要结合cs和ds的内容,cs里的值是1b,ds是23,所以你的程序是处在ring3.

ps:楼主的softice能在windows下用吗?怎么弄的?
回复
Alecksun 2007-04-14
Windows 的分段是个摆设,你当它不存在好了,真正的保护是在分页上处理的,低2G页表的特权级是用户的,高2G页表的特权级是系统的。至于分段,你说对了,就是给分页提供一个平坦的4G空间。同时段选择子表明了当前的特权级。

至于LDT,windows还真不用,为什么一定要用呢?一般的PC操作系统都不用,Linux也不用

回复
发帖
汇编语言
创建于2007-08-27

2.0w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2007-04-13 08:57
社区公告
暂无公告