(很抱歉我发布了类似的问题,我已经修改了。)我试图在WindowsXP上调试一个不可执行的PE文件,看看PDE和PTE在实际系统中是如何工作的。我了解到windgg有一些查看细节的命令。看来是这样!pte将能够看到虚拟地址的对应PDE和pte。但我遇到
0:000> !pte
No export pte found
我在谷歌上做了一些工作,发现这是一个扩展命令,但我没有看到任何关于如何启用这些扩展的描述。除了我,似乎每个人都在直接使用它。
我想知道我错过了什么,但我想不通。有人能给我一些建议吗?
谢谢。
由于您使用xpLocal Kernel Debugging
支持,无需编辑引导配置和重新启动
如果您使用的操作系统高于xp,则需要在开关上编辑操作系统的引导配置,并重新启动以获得本地内核调试支持
只有bcdedit /debug on and reboot
,windbg -kl
才能在大于XP的操作系统上工作
if you don't want to edit your boot configuration download livekd
from sysinternals and use it instead for local kernel debugging
用这个命令行打开windbg
windbg -kl
这将以提示lkd>
而不是0:000>
打开windbg
现在您可以使用!pte
命令
用要检查的正在运行的二进制文件的名称替换explorer.exe(请注意,这不是用户模式,您正在查看二进制文件的内核模式部分)
在下面的例子中,我在windows 7 x86 32位物理机中使用livekd
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 FilesWindows Kits8.1Debuggersx86kd.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>
您正在调试一个可执行文件。这意味着您正在用户模式中调试。在用户模式下查看应用程序,您将只看到虚拟内存。调试器将为您提供与应用程序/可执行文件相同的视图。
虚拟内存以不同的方式提供给应用程序。它可能是物理内存、页面文件内容,甚至什么都没有(对于保留内存)。
无论它在现实中是什么,这都是对应用程序隐藏的。这就是内核为您所做的。要了解它是如何做到这一点的,您需要使用内核调试。然后调试器将让您看到操作系统内部看到的内容,并允许使用与内核相关的命令,如!pte
(以及更多)。
PTE(页表条目)和PDE(页目录条目)正是内核用来执行虚拟内存和物理内存之间映射的"对象"。
为了分析这一点,您可能希望同时执行内核调试和用户模式调试,以验证您在内核端得到的结果是否与您在用户模式端得到的效果真正匹配。
既然你似乎是这个话题的新手,我建议你在虚拟机或专用电脑上这样做。不要使用有重要数据的电脑。在内核模式下,您可能会导致蓝屏并丢失所有未保存的工作。
NT调试博客上有一些文章,比如Understanding!pte-第1部分-让我们开始物理学习,然后是第2部分-标志和大页面,第3部分-非PAE和X64。