2013-05-25 61 views
3

在調試Windows(XP SP3)機器的內核時,我想查找用戶模式地址的頁面保護(實際上只是爲了檢查它是否爲「否」 - 執行頁面)。當內核調試 - 查找用戶模式地址的頁面保護

擴展!vprot(這樣做)在內核調試時不起作用。

我試圖改變到這個用戶模式的地址空間(使用'.process/i'),然後在地址上調用!pte。 但是有時候,PTE條目是無效的,因爲它被換出(我想)。

有什麼建議嗎?

回答

3

您可以嘗試VAD和地址的組合:!

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 \WINDOWS\system32\calc.exe 
3: kd> !vad 0x1014000 
VAD  level  start  end commit 
89e02578 (-1)  1000  101e   3 Mapped Exe EXECUTE_WRITECOPY \WINDOWS\system32\calc.exe 

的問題是,VAD只給你整個頁面的VAD!範圍,這更精確地說是瓦德段的大小。 Obviously頁面在0x1000000 [PE Header]和0x1014000 [.data節]有不同的保護。 !

使用地址:

注意地址命令將映射了很多東西(包括PTE的/ PFNs和心室輔助裝置):

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 [\WINDOWS\system32\calc.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 

希望能夠解決您的問題。