当前位置:   article > 正文

Windbg解析程序运行时虚拟地址对应的物理地址_在自己电脑上使用 windbg 解析 hello25.exe 程序运行时虚拟地址 0x0040300

在自己电脑上使用 windbg 解析 hello25.exe 程序运行时虚拟地址 0x00403000h 对

分析虚拟地址

本次实验使用 Windbg 解析 hello25.exe 程序运行时虚拟地址 0x00403000h 对应的物理地址,那么首先我们先对虚拟地址 0x00403000h 进行分析。

在 64 位操作系统下,虚拟地址的 63-48 位是符号扩展位,在虚拟地址到物理地址的转换过程中没有实际作用,所以我们重点关注剩下的 48 位,其中,47-39 位表示 PML4E,38-30位表示PDPTE,29-21 位表示PDE,20-12 位表示PTE,11-0 位表示页内偏移。以上各标志位与物理地址的联系如下图所示。
在这里插入图片描述
由上图可知,虚拟地址 0x00403000h 对应的各标志位如下表所示:

PML4EPDPTEPDEPTEOFFSET
00230

运行程序

在得知虚拟地址各标志位的数字后,我们运行实验可执行程序 hello25.exe,运行结果如下图所示

在这里插入图片描述

Windbg 追踪进程

现在我们以管理员身份运行 Windbg 来对该进程 hello25.exe 进行追踪,操作步骤为:File -> Attach to a Process -> 选择 hello25.exe -> OK
在这里插入图片描述
通过输入命令:db 403000,查看该进程在 0x403000 内存位置中的内容,如下图所示
在这里插入图片描述

Windbg 内核调试

我们现在以管理员身份打开另一个 Windbg 程序,并进行本地内核调试,操作步骤为:File -> Kernel Debug -> Local -> 确定,在本步骤中,可能会出现报错,请移步最后查看解决方案
在这里插入图片描述

寻找物理地址

我们首先通过命令 !process 0 0 hello25.exe 寻找该进程的 Dirbase,我们从下图可以看到在本机实验中,该进程的 Dirbase 是 0x278c60002
在这里插入图片描述
根据规则:上一级的 table entry 的 35-12 位提供了下一级的物理基地址的高 24 位,低 12 位补 0。由上图可知 PML4E 的上一级 DirBase 为 0x278c60002,我们在前面的对虚拟地址的分析中,已知虚拟地址 0x00403000h 的 PML4E 为 0,那么,我们输入命令 !dq 278c60000 + 0 * 8 来查找 PML4E 的物理基地址
在这里插入图片描述
由上图可知 PDPTE 的上一级 PML4E 为 0x26886c867,已知虚拟地址 0x00403000h 的 PDPTE 为 0,那么,我们输入命令 !dq 26886c000 + 0 * 8 来查找 PDPTE 的物理基地址
在这里插入图片描述
由上图可知 PDE 的上一级 PDPTE 为 0x21b26d867,已知虚拟地址 0x00403000h 的 PDE 为 2,那么,我们输入命令 !dq 21b26d000 + 0x2 * 8 来查找 PDE 的物理基地址
在这里插入图片描述
由上图可知 PTE 的上一级 PDE 为 0x21b26d867,已知虚拟地址 0x00403000h 的 PTE 为 3,那么,我们输入命令 !dq 20c06f000 + 0x3 * 8 来查找 PTE 的物理基地址
在这里插入图片描述
由上图可知 PTE 物理基地址为 0x21b26d867,已知虚拟地址 0x00403000h 的 页内偏移 为 0,那么,我们输入命令 !db 268291000,即找到了虚拟地址 0x00403000h 对应的物理地址为 0x268291000,可通过如下图所示,物理地址与虚拟地址对应的数据一致得以验证
在这里插入图片描述

Windbg 内核调试报错解决方案

在 Win10 系统下启用 Windbg 进行内核调试,可能出现如下报错,现在给出一种通过关闭操作系统的UAC机制来解决该问题的解决方案

在这里插入图片描述
通过 Win + R,打开 gpedit.msc 本地组策略编辑器

在这里插入图片描述
在编辑器的左面的列表中,依次点开“计算机配置” -> “windows设置” -> “安全设置” -> “本地策略” -> “安全选项”,在安全选项右面的窗口中找到“用户账户控制:以管理员批准模式运行所有管理员”,双击打开。最后在“用户账户控制:以管理员批准模式运行所有管理员”属性中选择“已禁用”,单击确定,重新启动计算机。
在这里插入图片描述
重启计算机后,以管理员身份打开命令行,输入 bcdedit -debug on 命令,再次重启计算机,即可使用 Windbg 来进行内核调试
在这里插入图片描述

参考网站

  • https://zhuanlan.zhihu.com/p/63523131
  • https://www.zhihu.com/question/28638698
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/236806
推荐阅读
相关标签
  

闽ICP备14008679号