内核调试windows(XP SP3(机器时,我想找到用户模式地址的页面保护(实际上只是为了检查它是否是一个无执行页面(。
分机!vprot(它就是这么做的(在内核调试时不起作用。
我尝试更改到此用户模式地址空间(使用'.process/I'(,然后调用!地址上的pte。但有时,PTE条目是无效的,因为它被调出了(我认为(。
有什么建议吗?
您可以尝试!vad
和!address
:的组合
0: kd> !process 0 0 calc.exe
PROCESS 89e035f8 SessionId: 0 Cid: 021c Peb: 7ffdd000 ParentCid: 00d4
DirBase: 0aac0200 ObjectTable: e1f587a8 HandleCount: 44.
Image: calc.exe
0: kd> .process /i 89e035f8
使用!vad
:
3: kd> !vad 0x1000000
VAD level start end commit
89e02578 (-1) 1000 101e 3 Mapped Exe EXECUTE_WRITECOPY WINDOWSsystem32calc.exe
3: kd> !vad 0x1014000
VAD level start end commit
89e02578 (-1) 1000 101e 3 Mapped Exe EXECUTE_WRITECOPY WINDOWSsystem32calc.exe
问题是!vad
命令只为您提供整个页面范围的VAD(虚拟AQddress描述符(,更准确地说是VAD段的大小。显然,0x1000000[PE Header]和0x1014000[.data section]处的页面没有相同的保护。
使用!address
:
注意,!address
命令将映射很多东西(包括PTE/PFN和VAD(:
3: kd> !address 0x1000000
Mapping user range ...
Mapping system range ...
Mapping page tables...
Mapping hyperspace...
Mapping HAL reserved range...
Mapping User Probe Area...
Mapping system shared page...
Mapping system cache working set...
Mapping loader mappings...
Mapping system PTEs...
Mapping system paged pool...
Mapping session space...
Mapping dynamic system space...
Mapping PFN database...
Mapping non paged pool...
Mapping VAD regions...
Mapping module regions...
Mapping process, thread, and stack regions...
Mapping system cache regions...
使用-v
和-map
选项:
3: kd> !address -v -map 0x1000000
PDE: c0600040 [contains 20b9a867]
Page Frame Number: 20b9a, at address: 00000000
Page Location: 6 (ActiveAndValid)
PTE Frame: 00020a98
Attributes: M:Modified,Cached
Usage: PTEs Process 89e035f8 [calc.exe], Entries:22
PTE: c0008000 [contains 20d86025]
Page Frame Number: 20d86, at address: 00000000
Page Location: 6 (ActiveAndValid)
PTE Frame: 00020384
Attributes: P:Prototype,M:Modified,Cached
Usage: MappedFile CA:8a1282e0 [WINDOWSsystem32calc.exe]
Type: Valid
Attrs: Private,NormalPage,NotDirty,NotDirty1,Accessed,User,NotWritable,NotWriteThrough
PFN: 20d86
Attrs
输出提供了有用的信息。此时您可能可以使用!pte
命令:
3: kd> !pte c0008000
VA 01000000
PDE at C0600040 PTE at C0008000
contains 0000000020B9A867 contains 0000000020D86025
pfn 20b9a ---DA--UWEV pfn 20d86 ----A--UREV
!pte
的输出给出PTE位(右边(,这里是:----A--UREV
:
A
:已访问U
:用户页面R
:只读E
:可执行文件V
:有效
命令文档:
!vad
!adress
!pte
希望能解决你的问题。