3、系统机制深入解析:段加载、任务状态段与硬件安全

系统机制深入解析:段加载、任务状态段与硬件安全

1. 延迟段加载机制

在 x86 和 x64 系统中,DS 和 ES 寄存器的值可能与它们对应环级的定义值不匹配。例如,x86 用户模式线程的段寄存器值如下:
- CS = 1Bh (18h | 3)
- ES, DS = 23 (20h | 3)
- FS = 3Bh (38h | 3)

而在 Ring 0 的系统调用期间,段寄存器值会变为:
- CS = 08h (08h | 0)
- ES, DS = 23 (20h | 3)
- FS = 30h (30h | 0)

同样,x64 内核模式线程的 ES 和 DS 段也会设置为 2Bh (28h | 3)。这种差异是由于延迟段加载特性导致的,它反映了在平坦内存模型下,当当前代码特权级别(CPL)为 0 时,数据段的描述符特权级别(DPL)的无意义性。因为较高的 CPL 总是可以访问较低 DPL 的数据,但反之则不行。如果在进入内核时将 DS 和/或 ES 设置为它们的“正确”值,那么在返回用户模式时也需要恢复这些值。

虽然 MOV DS, 10h 指令看似简单,但处理器的微代码在遇到它时需要执行一系列选择器正确性检查,这会给系统调用和中断处理带来显著的处理成本。因此,Windows 始终使用 Ring 3 数据段值,以避免这些相关成本。

2. 任务状态段(TSS)

除了代码和数据段寄存器外,x86 和 x64 架构还有一个额外的特殊寄存器:任务寄存器(TR),它是一个 16 位的选择器,作为全局描述符表(GDT)中的偏移量。在这种情况下,段条目与代码或数据

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值