什么是system pte?
Windows内核
什么是system pte?
Thomson
2010-11-27, 12:45 下午
和一般的pte有什么区别呢?
Re: 什么是system pte?
格蠹老雷
2010-11-28, 22:52 下午
U/S位(bit 2)通常不同, 为0, 代表内核特权.
例如:
kd> k
ChildEBP RetAddr
f8779d38 8053d648 nt!NtReadFile
f8779d38 7c90e514 nt!KiFastCallEntry+0xf8
00bdfe64 7c90d9da ntdll!KiFastSystemCallRet
00bdfe68 7c80199d ntdll!NtReadFile+0xc
00bdfed0 0100c232 kernel32!ReadFile+0x10d
00bdfef0 0100cb82 vmsrvc!VPCBusPipeClientEndPoint::ReadFromEndPoint+0x1e
00bdff6c 0100c049 vmsrvc!VPCBusPipeClientDataPipeEndPoint::HandleEventReadDataPipe+0x384
00bdff84 0100f53f vmsrvc!VPCBusPipeThread::HandleEvent+0x2e
00bdff94 0100c186 vmsrvc!VPCTransportEvent::DispatchEvents+0x1a
00bdffac 0100f12c vmsrvc!VPCBusPipeThread::ThreadEntry+0x38
00bdffb4 7c80b729 vmsrvc!VPCBusEvent_ThreadProc+0xc
00bdffec 00000000 kernel32!BaseThreadStart+0x37
kd> !pte 00bdfe68
VA 00bdfe68
PDE at 00000000C0600028 PTE at 00000000C0005EF8
contains 000000000B99D067 contains 800000000BACC067
pfn b99d ---DA--UWEV pfn bacc ---DA--UW-V
kd> !pte f8779d38
VA f8779d38
PDE at 00000000C0603E18 PTE at 00000000C07C3BC8
contains 0000000001031163 contains 800000000BA52163
pfn 1031 -G-DA--KWEV pfn ba52 -G-DA--KW-V
内核代码的地址f8779d38,对应PTE的低12位为163, U/S位为0...
Re: 什么是system pte?
Thomson
2010-11-29, 16:00 下午
多谢张老师.
我原文没有描述清楚. 其实我是想问system pte区域的.
在把书看好几遍后终于有点印象了.
说的应该是系统地址空间的一段, 以pte的形式来管理(比如把这段空间对应的pte做成一个linked list), 就像是用vad来管理用户空间一样.
Re: 什么是system pte?
格蠹老雷
2010-11-29, 22:31 下午
理解你说的,是有这样个区域的概念,是用MiSystemPteInfo这个全局变量来描述的:
kd> dd nt!MiSystemPteInfo l1
82f64820 00016200
kd> dt nt!_MI_SYSTEM_PTE_TYPE 82f64820
+0x000 Bitmap : _RTL_BITMAP
+0x008 Flags : 3
+0x00c Hint : 0xc863
+0x010 BasePte : 0xc0400000 _MMPTE
+0x014 FailureCount : 0x82f64848 -> 0
+0x018 Vm : 0x82f52540 _MMSUPPORT
+0x01c TotalSystemPtes : 2016
+0x020 TotalFreeSystemPtes : 1440
+0x024 CachedPteCount : 246
+0x028 PteFailures : 0
+0x02c SpinLock : 0
+0x02c GlobalMutex : (null)
简单理解,这个区域就是用来容纳系统页表的,每个页表其实也就是很多个System PTE,与上次说的是一致的