avatar
文章
16
标签
8
分类
1
首页
标签
分类
归档
Pemic's Blog
搜索
首页
标签
分类
归档

Pemic's Blog

保护模式(六)| 页表基址与 2-9-9-12 分页
发表于2026-02-09|Windows 逆向
# 前言 上一篇我们学习了 10-10-12 分页机制和 PDE/PTE。本篇将深入讲解页目录表基址、页表基址,以及 2-9-9-12(PAE)分页机制。 # 页目录表基址与页表基址 如果想填充 PDE 与 PTE,必须能够访问 PDT 与 PT。这就引出两个问题: 一定存在某个线性地址能够访问 PDT 与 PT(并且已经挂好了 PDE 与 PTE),如何找到这个地址? 这个为我们挂好 PDE 与 PTE 的 "人" 是谁? 注意:Cr3 中存储的是物理地址,不能在程序中直接读取。如果想读取,也要把 Cr3 的值挂到 PDT 和 PT 中才能访问。 # 高地址内核空间的设计 在 x86 的虚拟地址空间(4GB)中: 用户空间: 0x00000000 ~ 0x7FFFFFFF 内核空间: 0x80000000 ~ 0xFFFFFFFF Windows 为页表和页目录表保留了线性地址 0xC0000000 到 0xC03FFFFF 的 4MB 空间。 最关键的设计:页目录表的第 0x300 项指向页目录表本身。 因此: 访问线性地址 0...
保护模式(五)| 10-10-12 分页与 PDE/PTE
发表于2026-02-09|Windows 逆向
# 前言 上一篇我们学习了中断门、陷阱门和任务段。本篇将深入介绍 10-10-12 分页机制,以及 PDE 和 PTE 的结构与实验。 # 10-10-12 分页 10-10-12 分页是一种内存分页机制,将 32 位虚拟地址分为三个部分:10 位页目录索引(PDI)、10 位页表索引(PTI)、12 位页内偏移,通过两级页表(页目录表 + 页表)实现地址映射。 # 4GB 内存空间 每个程序运行时,操作系统都会为其分配一段 4GB 的内存空间。 但电脑的物理内存可能不够为每个进程都分配 4GB。实际上,进程被分配到的 "4GB 内存空间" 只是虚拟的内存空间,并不是真正的物理内存,虚拟内存与物理内存之间有一层转换关系。 # 有效地址 / 线性地址 / 物理地址 # 有效地址与线性地址 例如: mov eax, dword ptr ds:[0x12345678] 其中, 0x12345678 是有效地址, ds.Base + 0x12345678 是线性地址。 注意:当段寄存器的 Base 为 0 时,有效地址 = 线性地址(大多数时候都是如此)。但也有...
保护模式(四)| 中断门、陷阱门与任务段
发表于2026-02-09|Windows 逆向
# 前言 上一篇我们学习了调用门的原理和实验。本篇将介绍中断门与陷阱门,以及任务状态段(TSS)和任务门。 # 中断门与陷阱门 特性 中断门(Interrupt Gate) 陷阱门(Trap Gate) 功能 用于处理硬件中断和异步事件 用于处理软件异常和同步事件 IF 标志行为 自动清除 IF 标志,禁止进一步中断嵌套 不清除 IF 标志,允许中断嵌套 使用场景 处理硬件中断(如键盘、时钟) 处理系统调用或软件异常 中断响应 防止嵌套中断,确保中断处理代码不被打断 允许嵌套中断,提高系统灵活性 类型标识 Type = 0xE Type = 0xF # 中断描述符表(IDT) 描述:中断描述符表(Interrupt Descriptor Table,IDT)与 GDT 类似,也是由一系列描述符组成的,每个描述符占 8 个字节。但要注意,IDT 表中的第一个元素不是 NULL。 使用 WinDbg 查看 IDT 表的基址和大小: IDT 表可以包含三种门描述符: 任务门描述符 中断门描述符 陷阱门描述符 # 中断门 中断门是用于处理硬件...
保护模式(三)| 调用门
发表于2026-02-09|Windows 逆向
# 前言 上一篇我们学习了段权限检查和代码跨段跳转。本篇将深入探讨短调用、长调用和调用门的原理与实验。 # 短调用 指令格式: 1CALL 立即数/寄存器/内存 发生改变的寄存器:ESP、EIP。 # 长调用(跨段不提权) 指令格式: 1CALL CS:EIP ; EIP 是废弃的(由段描述符决定) 发生改变的寄存器:ESP、EIP、CS。 # 长调用(跨段并提权) 指令格式: 1CALL CS:EIP ; EIP 是废弃的(由段描述符决定) # 执行(CALL)时 发生改变的寄存器:ESP、EIP、CS、SS。 注意:长调用执行后,堆栈已经不是原来的堆栈,而是 0 环的堆栈(ESP0)。 # 返回(RETF)时 发生改变的寄存器:ESP、EIP、CS、SS。 # 小结 跨段调用时,一旦有权限切换,就会切换堆栈。 CS 的权限一旦改变,SS 的权限也要随着改变,CS 与 SS 的等级必须一样。 JMP FAR 只能跳转到同级非一致代码段,但 CALL FAR 可以通过调用门提权,提升 CPL 的权限。 SS 与 ESP 从哪里来?参考 TSS 段(...
保护模式(二)| 段权限检查与代码跨段跳转
发表于2026-02-09|Windows 逆向
# 前言 上一篇我们学习了段寄存器和 GDT 的基本结构。本篇将深入探讨段权限检查机制以及代码跨段跳转的原理。 # 段权限检查 # CPU 分级 平时我们称应用程序为 "3 环",系统程序为 "0 环"—— 这里所说的 "环" 与 CPU 有关,与操作系统无关。 # 进程特权级别 # CPL(Current Privilege Level,当前特权级) 描述:段寄存器 CS 的最低两个比特位称为当前特权级,表示当前任务(或正在执行的代码)所处的特权级别。 注意:段选择子 SS 和 CS 的最低两个比特位始终相同。 例:当 CS = 0x001B 时: 0x001B = 0b0000000000011011 最低两位 = 0b11 = 3 因此:当前进程处于 3 环 # RPL(Requested Privilege Level,请求特权级) 描述:RPL 存储在段选择子中。它是一个请求的特权级,表示当程序访问一个特定段时,希望使用的特权级。 要点: RPL 是段选择子结构中的一部分 RPL 是针对段选...
保护模式(一)| 段机制基础
发表于2026-02-09|Windows 逆向
# 前言 本文是 "保护模式" 系列笔记的第一篇,主要介绍 x86 架构下保护模式的基本概念和段机制基础。 参考资料:Intel 白皮书第三卷 # Windows 工作模式 实模式:早期的 DOS 和 Windows 版本工作在此模式下,允许直接访问硬件,但只能寻址 1MB 的内存(因为地址空间为 20 位)。 保护模式:Windows 95 和更高版本大多运行在保护模式下,能够使用 x86 架构的保护特性,如多任务、内存保护和更大的内存寻址,最大可访问 4GB 内存空间,是现代操作系统的基本运行模式。 虚拟 8086 模式:是保护模式下的一种特殊运行模式,允许在一个受保护的环境中运行 16 位的 DOS 应用程序。每个 DOS 程序运行在独立的虚拟 8086 环境中,不会干扰其他程序。 # 段寄存器 在 x86 架构中,当读写某一个地址时: 1mov dword ptr ds:[0x123456], eax 真正读写的地址是: 1ds.base + 0x123456 其中, ds 是段寄存器。在 x86 架构中,段寄存器共有 8 个: 段寄存器 ...
12
avatar
Pemic
个人技术博客
文章
16
标签
8
分类
1
Follow Me
公告
分享技术与生活
最新文章
进程与线程(五)| 线程优先级、进程挂靠与跨进程读写2026-02-10
进程与线程(四)| 线程切换与时钟中断2026-02-10
进程与线程(三)| 等待链表、调度链表与线程切换模拟2026-02-09
进程与线程(二)| 线程结构体与 KPCR2026-02-09
进程与线程(一)| 进程结构体2026-02-09
分类
  • Windows 逆向16
标签
进程与线程Windows 内核逆向工程保护模式x86分页TLB系统调用
归档
  • 二月 2026 16
网站信息
文章数目 :
16
本站总字数 :
34.2k
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By Pemic框架 Hexo 8.1.1|主题 Butterfly 5.5.4
浙ICP备2025216280号-1
搜索
数据加载中