Archive for the ‘平台’ Category

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所占的空间

0xCC

经常在debug模式下看到有如下汇编代码用0xCC填充栈空间:

mov ecx, 30h

mov eax, 0CCCCCCCCh

rep stos dword ptr es:[edi]

今天才知道0xCC是int 3调试中断的机器码,恍然大悟。

ln

ln (List Nearest Symbols)
The ln command displays the symbols at or near the given address.

Syntax
ln Address

Parameters
Address
Specifies the address where the debugger should start to search for symbols. The nearest symbols, either before or after Address, are displayed. For more information about the syntax, see Address and Address Range Syntax.

OpenProcessToken

OpenProcessToken

【分享】利用系统Hotpatch加载驱动的一种比较取巧的方法

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