Windows NT内核分析

    技术2022-05-20  50

    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。

     

    待续。。。。。。。。


    最新回复(0)