(对不起我发布的类似问题,我已对其进行了修改。) 我试图在Windows XP上调试一个可删除的PE文件,看看PDE和PTE在真实系统中是如何工作的。我已经了解到windbg有一些命令可以查看详细信息。似乎!pte将能够看到虚拟地址的相应PDE和PTE。但我遇到了
0:000> !pte
No export pte found
我做了一些谷歌工作并发现它是extension command,但我没有看到有关如何启用这些扩展的任何说明。除了我之外,似乎每个人都在直接使用它。
我想知道我错过了什么,但我无法弄明白。有人可以给我一些建议吗?
感谢。
答案 0 :(得分:1)
因为您使用 xp Local Kernel Debugging
支持,而无需编辑启动配置并重新启动
如果您的操作系统高于xp,则需要使用/ debug on switch编辑操作系统的启动配置并重新启动以获取本地内核调试支持
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>
现在您可以使用!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 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>
答案 1 :(得分:0)
您正在调试可执行文件。这意味着您正在用户模式中进行调试。在用户模式下查看应用程序,您将只看到虚拟内存。调试器将为您显示与应用程序/可执行文件相同的视图。
虚拟内存以不同方式提供给应用程序。它可能是物理内存,页面文件内容甚至没有(对于保留内存)。
无论现实是什么,这都隐藏在应用程序之外。这就是内核为您所做的。要了解它是如何做到的,您需要使用内核调试。然后调试器将让您看到操作系统在内部看到的内容,并允许使用与!pte
等内核相关的命令(以及更多内容)。
PTE(页表条目)和PDE(页面目录条目)正是内核用于执行虚拟内存和物理内存之间映射的“对象”。
要分析这一点,您可能希望同时执行内核调试和用户模式调试,以验证您在内核端获得的结果是否与您在用户模式端获得的结果完全匹配。
由于您似乎对此主题不熟悉,我建议您在虚拟机或专用PC上执行此操作。请勿使用具有重要数据的PC。在内核模式下,您可能会导致蓝屏并丢失所有未保存的工作。
来自NT调试博客的文章,如Understanding !pte - Part 1 - Let's get physical,可以帮助您入门,然后是Part 2 - Flags and Large Pages和Part 3 - Non-PAE and X64。