Windows NT内核分析

1、几个虚拟地址区间:

0x00000000 - 0x0000FFFF 不可访问,NULL指针检测

0x7FFDE000 - 0x7FFDEFFF TEB

0x7FFDF000 - 0x7FFDFFFF PEB

0x7FFE0000 - 0x7FFE0FFF 共享数据区

0x80000000 - 0x9FFFFFFF 系统代码,HAL和ntoskrnl.exe,驱动(boot和ntosldr)。GDT、IDT和TSS

0xC0000000 - 0xC0FFFFFF 系统表。进程页表,页目录等和进程相关的数据结构。

0xE1000000 - 0xE57FFFFF 分页池

0xFB000000 - 0xFFDFEFFF 非分页池

0xFFDFF000 - 0xFFFFFFFFF PCR用于每个进程。保存PCR结构体,包含了IRQL,当前线程,IDT等。

 

2、保护

Intel提供段机制,描述符中的DPL保护每个被描述的逻辑段。但Windows NT实现的是FLAT模型。这样选种子的使用降到了最低限度。下面是GDT中的表项:

Sel            Type                Base                   Limit               DPL                    Attributes

0008         Code32          00000000           FFFFFFFF        0                       P RE

0010         Data32           00000000           FFFFFFFF       0                        P RW

001B         Code32          00000000           FFFFFFFFF      3                       P RE

0023         Data32           00000000           FFFFFFFFF      3                       P RW

0028         TSS32             8024D000           FFFFFFFFF     0                       P B

0030         Data32           FFDFF000            00001FFF     0                       P RW

003B         Data32           7FFD9000           00000FFF    3                       P RW

。。。

在FLAT模型下,APP并不关心段寄存器的内容。在ring3时候,CS、DS、SS寄存器总是分别为8、10、10。

代码运行在ring0时,FS寄存器为30,用于寻址PCR结构体如果在ring3,FS为3b。

 

待续。。。。。。。。

你可能感兴趣的:(数据结构,windows,null)