Archive for the ‘Windows’ Category

KdPrint格式化输出

DbgPrint/KdPrint输出格式控制

KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING

TEB PEB

TEB PEB.txt

密码保护:游戏保护

This content is password protected. To view it please enter your password below:

GetNtdllBaseAddress

GetNtdllBaseAddress.cpp

Window分页机制

Windows的分页机制是线性地址--->PDE--->PTE--->物理地址,那么具体是怎么映射的呢?

1个PTE占4bytes代表4kb页面大小,1个页表含1024个PTE,因此占4kb代表4M空间大小。那么映射整个地址空间4G需要1024个页表,占4M。

Windows使用了两级页表,即每个页表的基址又由1个PDE占4bytes指示,因此1个页目录占4kb。

Windows将页表本身也映射到了进程的地址空间(准确的说是进程地址空间的系统地址空间)。先看看如果是我们自己该如何安排?

假设把页表本身安排在最低的4M区域,那么页表里第1张页表映射的就是自己!那么第1张页表第1个PTE就是第1张页表的基址,第2个PTE就是第2张页表的基址!

看看这里的第1张页表的PTE是不是和页目录的PDE效果一样?没错,页目录和第1张页表的内容一样,所以可以等价。

现在来看看Windows是如何安排的。

Windows将页表安排在0xc0000000处,算一算页表中的哪张会映射到整个页表本身呢?没错,第(0xc0000000/0x400000(4M)+1=0x301=787)张页表(从1开始)!其偏移是0x300*0x1000(4kb)=0x300000!同样,它也是页目录的基址,即0xc0300000。这就是Windows的页目录自映射方案,节省了4kb页目录空间。

Windows系统中PDE和PTE所占的空间

无觅相关文章插件,快速提升流量