-
-
[原创]内核学习阶段还在翻手册查 PDE/PTE 标志位?这个工具让你一眼看懂
-
-
[原创]内核学习阶段还在翻手册查 PDE/PTE 标志位?这个工具让你一眼看懂
[原创]TF_PDE-PTE:x86/x64 分页地址转换与段描述符可视化学习工具
关于本工具声明:本工具在 AI(DeepSeek)协助下完成开发,核心逻辑由人工设计,代码实现 AI 参与。
开发过程:人工设计架构 + AI 辅助编码
0x00 写在前面
学习 x86 分页机制的时候,有没有这种感觉:
- PDE/PTE 几十个标志位,学完就忘
- WinDbg 的
!vtop / !pte 输出是一堆十六进制数,要对着手册手动拆位
- 每次想确认一个线性地址转换是否正确,都要翻半天 Intel 手册
为了解决这个痛点,我写了一个本地 Qt 可视化学习工具:TF_PED-PTE
绿色 = 1(开启),红色 = 0(关闭),一眼看清标志位状态。 
0x01 工具定位
专治"学完就忘,不想翻笔记"的分页/段描述符标志位可视化查阅器
- 粘贴即用:支持 WinDbg 输出自动解析
- 一图胜千言:绿红块可视化,一眼看清标志位状态
- 离线可用:无需网络,不依赖在线服务
- 轻量快速:PySide6 / Qt 实现
0x02 功能概览
1. 分页地址转换(核心功能)
| 特性 |
说明 |
| 分页模式 |
非 PAE / PAE |
| 输入方式 |
手工填写 CR3/PDPTE/PDE/PTE/线性地址,或直接粘贴 WinDbg 文本自动抽取 |
| 输出 |
详细文本报告 + 真彩色标志位卡片 |
真彩色标志位卡片示例:

- ???? 绿色 = 1(开启)
- 红色 = 0(关闭)
- ⚪ 灰色 = 保留位 / 忽略位
2. 段描述符解析
支持解析 64 位段描述符:
- Type / S / DPL / P / G / D/B / L
- 自动区分代码段/数据段/系统段
- 展示默认操作数宽度、栈指针语义等

3. 分页位拆分
| 分页模式 |
位拆分 |
| non_pae |
10 / 10 / 12 |
| pae |
2 / 9 / 9 / 12 |
| x64 |
9 / 9 / 9 / 9 / 12 |
以文本方式显示位切分和索引值。 
0x03 WinDbg 联动
支持以下格式的自动解析:
!vtop 输出示例:
kd> !vtop 3eb63ac0 0028E928
X86VtoP: Virt 0028e928, pagedir 3eb63ac0
X86VtoP: PAE PDPE 3eb63ac0 - 0000000019487801
X86VtoP: PAE PDE 19487008 - 0000000023ec2867
X86VtoP: PAE PTE 23ec2470 - 8000000019ed2967
X86VtoP: PAE Mapped phys 19ed2928
!pte 输出示例:
VA 12345678
PDE at C030048C PTE at C0091A28
contains 00ABC003 contains 0FEDC007
粘贴到工具文本框,点击"从文本提取字段",自动填充所有字段并执行转换。
0x04 界面预览
┌─────────────────────────────────────────────────────────────────┐
│ [分页转换] [段描述符] [分页拆分] │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────┐ ┌─────────────────────────────────────┐ │
│ │ 输入区 │ │ ???? 标志位可视化面板 │ │
│ │ - 线性地址 │ │ ┌─────┬─────┬─────┬─────┬─────┐ │ │
│ │ - CR3 │ │ │ P │ R/W │ U/S │ PWT │ PCD │ │ │
│ │ - PAE 复选框 │ │ │ 1 │ 1 │ 1 │ 0 │ 0 │ │ │
│ │ - PDPTE/PDE/PTE │ │ └─────┴─────┴─────┴─────┴─────┘ │ │
│ │ - WinDbg 文本导入 │ │ │ │
│ └─────────────────────┘ │ ┌─────┬─────┬─────┬─────┬─────┐ │ │
│ │ │ A │ D │ G │ PAT │ NX │ │ │
│ │ │ 1 │ 0 │ 1 │ 0 │ 0 │ │ │
│ │ └─────┴─────┴─────┴─────┴─────┘ │ │
│ └─────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 详细报告 │ │
│ │ ======================================================== │ │
│ │ 模式: PAE │ │
│ │ 线性地址: 0x0028E928 │ │
│ │ 物理地址: 0x19ED2928 │ │
│ │ 结论: PDPTE.P=1,PDE.P=1,PDE.PS=0,PTE.P=1,有效 │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
0x05 运行环境与使用方法
环境要求
安装依赖
pip install PySide6
运行
python run_tf_ped_pte.py
快速上手
- 非 PAE 示例:点击"非 PAE 示例"按钮,自动填充并转换
- PAE 示例:点击"PAE 示例"按钮
- WinDbg 文本:复制 WinDbg 输出,粘贴到文本框,点击"从文本提取字段"
0x06 项目文件说明
| 文件 |
说明 |
run_tf_ped_pte.py |
启动入口 |
tf_ped_pte/qt_app.py |
Qt 主界面 |
tf_ped_pte/paging_logic.py |
分页换算核心逻辑 |
tf_ped_pte/gui_support.py |
WinDbg 正则解析、标志位颜色模型 |
tf_ped_pte/segment_logic.py |
段描述符解析、分页拆分逻辑 |
0x07 已知限制
- 当前仅支持 32 位线性地址的 PAE/非 PAE 转换(x64 模式仅位拆分支持)
- 不直接连接 WinDbg,不读取 live memory
- WinDbg 文本解析依赖正则表达式,极端格式可能需要微调
0x08 下载地址
GitHub:4d5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1j5h3W2@1j5h3&6Y4x3o6x3J5i4K6u0r3f1p5g2p5i4K6u0V1f1q4c8q4i4K6u0V1g2X3W2*7i4K6u0r3N6s2u0W2k6g2)9J5c8X3#2S2K9h3^5`.
0x09 后续计划
- x64 完整分页转换支持
- 一键复制可视化面板为图片
- 输入历史记录
- 亮色/暗色主题切换
0x0A 写在最后
这个工具的目标很简单:当你需要查分页标志位的时候,不用再翻手册。
如果你觉得有用,欢迎点赞、转发、提 PR。
有问题或建议,直接回帖或 GitHub Issues 见。
TF_PDE-PTE —— 让分页学习不再痛苦 ????
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 5天前
被刘宝编辑
,原因: