2016-04-03 118 views
0

(對不起,我發佈了類似的問題,我修改了它。) 我試圖在Windows XP上調試一個易變的PE文件,以瞭解PDE和PTE如何在真實系統中工作。我瞭解到windbg有一些命令來查看細節。看來,pte將能夠看到虛擬地址的相應PDE和PTE。但我遇到無法在WinDBG中運行擴展命令

0:000> !pte No export pte found

我做了一些谷歌的工作,發現這是一個extension command,但我沒有看到有關如何啓用這些擴展的任何說明。似乎每個人都在直接使用它,除了我。

我想知道我錯過了什麼,但我無法弄清楚。任何人都可以請給我一些建議嗎?

感謝。

+0

感謝。你的意思是從另一臺計算機調試更好嗎? –

+1

不,這意味着'!pte'可能與您嘗試解決的問題無關。你的問題類似於詢問「我正在執行用戶模式 ​​- 調試,但是['!idt'](https://msdn.microsoft.com/en-us/library/windows/hardware/ff563219(v = vs。 85).aspx)命令來顯示中斷不起作用!我應該使用兩臺電腦嗎?「不。該命令與用戶模式調試無關。 – conio

+0

爲什麼你認爲'!pte'會有幫助?到目前爲止你還使用了其他的命令?你想解決什麼問題?爲什麼要調試可執行文件?它會崩潰嗎? WinDbg有數百個命令。你爲什麼選擇這個進行調試? –

回答

0

,因爲你正在使用XPLocal Kernel Debugging支持可不必編輯引導配置和重啓

如果你是一個操作系統,你需要編輯/調試OS的啓動配置高於XP在開關和重啓本地內核調試支持

bcdedit /debug on and rebootwindbg -kl將在OS比XP

if you don't want to edit your boot configuration download livekd  
from sysinternals and use it instead for local kernel debugging 
012更大的工作

使用此命令行

windbg -kl 

開放的WinDbg,這將打開的WinDbg與提示lkd>代替0:000>

現在你可以使用!pte命令

替代的explorer.exe用你想檢查的正在運行的二進制文件的名稱(注意這不是用戶模式,你正在查看二進制文件的內核模式部分)
在下面的例子中,我使用livekd在視窗7 86 32位物理機

C:\>livekd  
LiveKd v5.40 - Execute kd/windbg on a live system 
Sysinternals - www.sysinternals.com 
Copyright (C) 2000-2015 Mark Russinovich and Ken Johnson 

Launching C:\Program Files\Windows Kits\8.1\Debuggers\x86\kd.exe: 

Microsoft (R) Windows Debugger Version 6.3.9600.17298 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 

kd> !process 0 0 explorer.exe 

PROCESS 864b2638 SessionId: 1 Cid: 05f8 Peb: 7ffde000 ParentCid: 05e4 
    DirBase: 7e28c2c0 ObjectTable: 964ccad8 HandleCount: 1062. 
    Image: explorer.exe 

kd> .process /p /r 864b2638 
Implicit process is now 864b2638 
Loading User Symbols 

kd> !pte explorer 
        VA 00400000 
PDE at C0600010   PTE at C0002000 
contains 000000000FFB2867 contains 80000000103F7025 
pfn ffb2  ---DA--UWEV pfn 103f7  ----A--UR-V 

kd> $$ page table entry contains 103f7025 
kd> dc c0002000 l1 
c0002000 103f7025        %p?. 
kd> $$ the top 5 bytes are page frame nos lets see if the physical page contains MZ 
kd> !dc 103f7000 l1 
#103f7000 00905a4d MZ.......L`...ac 
kd> 
+0

非常感謝,非常有用和實用。我將學習使用livevd。 –

+0

這幾天我已經測試過了,但事實證明PAE是在我的機器上啓用的,所以'!pte'由於PDPE的存在而無法正常工作(發現這個事實花了很多時間)。看到如何將虛擬地址轉換爲物理地址,'!vtop'命令似乎更爲可行。再次感謝您的幫助。 –

0

您正在調試可執行文件。這意味着您正在調試用戶模式。以用戶模式查看應用程序,您將只能看到虛擬內存。調試器將呈現與應用程序/可執行文件相同的視圖。

虛擬內存以不同方式提供給應用程序。它可能是物理內存,頁面文件內容甚至沒有內容(用於保留內存)。

無論它是在現實中,這是隱藏的應用程序。這就是內核爲你做的。要看它是如何做到的,你需要使用內核調試。然後調試器會讓你看到操作系統在內部看到什麼,並允許使用內核相關的命令,如!pte(還有更多)。

PTE(頁表條目)和PDE(頁目錄條目)正是內核用於執行虛擬內存和物理內存之間映射的「對象」。

爲了分析這一點,您可能需要同時執行內核調試和用戶模式調試,以驗證您在內核方面得到的結果是否與您在用戶模式方面得到的結果非常匹配。

由於看起來你是這個主題的新手,我建議在虛擬機或專用PC上這樣做。不要使用具有重要數據的PC。在內核模式下,您可能會導致藍屏並丟失所有未保存的工作。

有一些來自NT調試博客的文章,比如Understanding !pte - Part 1 - Let's get physical,它讓你開始,然後是Part 2 - Flags and Large PagesPart 3 - Non-PAE and X64

+0

內核調試不是危險的。當然,你可能會崩潰你的機器,但是真正銷燬它並且腐蝕持久數據需要一些努力。在任何情況下,使用'livekd'來玩''pte'(正如提出的blabb)不僅綽綽有餘,而且更容易,更加用戶友好且更快。 – conio

+0

謝謝。事實上,我是一個新手。我會盡力瞭解博客。 –

+0

@conio:是的,這就是爲什麼我們有藍屏:保護你不會丟失超過RAM的內容。但即使丟失RAM內容有時也會受到傷害。我重述了這一點。 –