windows内核的分析(3)
0090 Reserved 00000000 00000000 0 NP
...
00E0 Reserved 00008003 00006100 0 NP
00E8 Data16 00000000 0000FFFF 0 P RW
00F0 Code16 80117DB0 0000028D 0 P EO
00F8 Data16 00000000 0000FFFF 0 P RW
0100 Reserved 00008003 00006108 0 NP
...
03F8 Reserved 00000000 00000000 0 NP
前四个选择子全都位于线性地址空间。而且前两个选择子的描述符特权级DPL(Descriptor Privilege Level)等于0,而后面两个的都是3。选择子8和10由用户应用程序使用。在FLAT模型下,应用程序本身并不关心段寄存器的内容。在ring3工作时,CS、DS、SS寄存器总是分别为值8、10、10。这样,系统代码就可以监视段寄存器的值。选择子1b和23用于内核(驱动程序、系统代码)工作时的寻址。选择子30和3b分别指向Kernel Process Region和Thread Information Block。当代码运行在ring0时,FS寄存器的值为30,如过运行在ring3,则FS的值为3b。选择子30总是指向基址为FFDFF000的描述符。选择子3b指示的基址则依赖于用户线程。选择子48定义了局部描述符表LDT(Local Descriptor Table)。LDT只在Virtual DOS machine(VDM)应用程序下使用。当运行该进程时,在处理器的LDTR寄存器中加载着相应的指针,否则,LDTR的值为0。LDT主要用在Windows 3.x应用程序下。Windows 3.x应用程序运行在WOW(Windows On Windows)下,而WOW则实现在VDM进程里。VDM进程的LDT使用上和Win3.x里的一样。在GDT表里总会有两个TSS类型的选择子。这是因为运行在Intel处理器上的Windows NT操作系统没有使用基于任务门的任务切换机制。IDT包含以下描述符(由SoftIcea得到):
Int Type Sel:Offset Attributes Symbol/Owner
IDTbase=F8500FC8 Limit=07FF
0000 IntG32 0008:8013EC54 DPL=0 P _KiTrap00
...
0007 IntG32 0008:8013F968 DPL=0 P _KiTrap07
0008 TaskG 0050:00001338 DPL=0 P
0009 IntG32 0008:8013FCA8 DPL=0 P _KiTrap09
...
0012 IntG32 0008:80141148 DPL=0 P _KiTrap0F
...
0
相关新闻>>
- 发表评论
-
- 最新评论 更多>>