能力值:
( LV12,RANK:230 )
|
-
-
2 楼
堕落天才那好像不能在xp sp2上跑,笼统的说他是想检测eprocess是否在内存中。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我在SP2上面跑起了的.因为里面给出的硬编码偏移地址都是Sp2的。。.它是通过_EPROCESS中的PEB的地址的前面4位作为标志来进行判断的是否是在EPROCESS块中的PEB变量中.....
就是判断地址是否有效的哪个函数是撒子意思嘛!!!!!!
|
能力值:
( LV12,RANK:230 )
|
-
-
4 楼
kd> dt _HARDWARE_PTE
nt!_HARDWARE_PTE
+0x000 Valid : Pos 0, 1 Bit
+0x000 Write : Pos 1, 1 Bit
+0x000 Owner : Pos 2, 1 Bit
+0x000 WriteThrough : Pos 3, 1 Bit
+0x000 CacheDisable : Pos 4, 1 Bit
+0x000 Accessed : Pos 5, 1 Bit
+0x000 Dirty : Pos 6, 1 Bit
+0x000 LargePage : Pos 7, 1 Bit
+0x000 Global : Pos 8, 1 Bit
+0x000 CopyOnWrite : Pos 9, 1 Bit
+0x000 Prototype : Pos 10, 1 Bit
+0x000 reserved : Pos 11, 1 Bit
+0x000 PageFrameNumber : Pos 12, 20 Bits
0位和7位。当0位为1时,说明PTE有效,我们遍历的页在物理内存中,一切安全... 而7位的LargePage表示当前虚拟地址大于等于0x80000000 并且小于0xa0000000(减去0x80000000就得到了物理地址),很和谐,这部分也是安全的....
完事了,转到页目录项PDE,对我们有用的信息不多,0位是1时为Valid,其他的不关心了。 :-)
大概情况是这样:
4G地址空间的1024个页表按顺序被映射到了0xC0000000~0xC03FFFFF的4M地址空间。第一个4M地址空间的页表对应0xC0000000开始的4K,以此类推。而页目录被映射到了0xC0300000开始处的4K地址空间。
也就是说,PTE是按0x1000(4KB)步进,而PDE是按0x400000(4mb)递增。
从WINDOWS内核勾出来的,如下:
#define MiGetPteAddress(va) ((PMMPTE)(((((ULONG)(va)) >> 12) << 2) + PTE_BASE))
#define MiGetPdeAddress(va) ((PMMPTE)(((((ULONG)(va)) >> 22) << 2) + PDE_BASE))
PTE_BASE为0xc0000000,PDE_BASE为0xc0300000。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
完全感谢楼上,炕上米打。。。恩。。理解了。。
|
|
|