无法在 WinDBG 中 运行 扩展命令

Cannot run extension commands in WinDBG

(抱歉我发布的类似问题,我已经修改了它。) 我正在尝试在 windows XP 上调试可执行的 PE 文件,以查看 PDE 和 PTE 在真实系统中的工作方式。我了解到 windbg 有一些命令可以查看详细信息。似乎 !pte 可以看到虚拟地址对应的 PDE 和 PTE。但是我遇到了

0:000> !pte No export pte found

我做了一些 google 的工作,发现它是一个 extension command,但我没有看到任何关于如何启用这些扩展的描述。貌似除了我,其他人都在直接用

我想知道我错过了什么,但我想不通。谁能给我一些建议吗?

谢谢。

您正在调试一个 executable。这意味着您正在 用户模式 ​​ 中进行调试。查看用户模式下的应用程序,您只会看到 虚拟内存 。调试器将向您呈现与 application/executable 相同的视图。

虚拟内存以不同的方式提供给应用程序。它可以是物理内存、页面文件内容,甚至什么都不是(对于保留内存)。

无论在现实中是什么,这对应用程序都是隐藏的。这就是内核为你所做的。要查看它是如何做到的,您需要使用 内核调试 。然后,调试器会让您看到 OS 在内部看到的内容,并允许使用内核相关命令,例如 !pte(以及更多)。

PTE(页table项)和PDE(页目录项)正是"objects"内核用来进行虚拟内存和物理内存映射的

为了分析这一点,您可能希望同时执行内核调试和用户模式调试,以验证您在内核端获得的结果是否与您在用户模式端获得的结果真正匹配。

由于您似乎是这个主题的新手,我建议您在虚拟机或专用 PC 上进行操作。不要使用有重要数据的电脑。在内核模式下,您可能会导致蓝屏并丢失所有未保存的工作。

NT 调试博客中有文章 Understanding !pte - Part 1 - Let's get physical which get you started, followed by Part 2 - Flags and Large Pages and Part 3 - Non-PAE and X64

因为您使用的是 xp Local Kernel Debugging 无需编辑引导配置和重新启动即可获得支持

如果您使用的操作系统比 xp 更高,您需要编辑 os 的启动配置,将 /debug 打开并重新启动以获得本地内核调试支持

bcdedit /debug on and reboot 只有 windbg -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 

使用此命令行打开 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 Files\Windows Kits.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>