
探究 | Intel FRED 实现
概述 FRED(Flexible Return and Event Delivery) 是 Intel 引入的新型特权级切换与事件处理架构,用于替代传统的 IDT 事件交付(IDT event delivery)和 IRET 返回机制,同时 AMD 也宣布在即将到来的 Zen6 中采用此功能,所以我认为有必要借此来简单介绍一下。 在阅读本篇内容前,需要读者对 x64 架构有一...

概述 FRED(Flexible Return and Event Delivery) 是 Intel 引入的新型特权级切换与事件处理架构,用于替代传统的 IDT 事件交付(IDT event delivery)和 IRET 返回机制,同时 AMD 也宣布在即将到来的 Zen6 中采用此功能,所以我认为有必要借此来简单介绍一下。 在阅读本篇内容前,需要读者对 x64 架构有一...

引言 在某些追求极致游戏性能的用户眼里,微软的 Virtualization-based Security (VBS) 是一个讨厌的东西,它依赖于 Microsoft Hypervisor (MSHV),以前禁用它的方式就是修改引导配置 bcdedit /set hypervisorlaunchtype off,但在某次更新以后,大家发现这个方法无效了。 原理 在探寻为何会禁用失败之前...

在阅读本篇内容前,需要读者对 x64 架构有基本的了解。 引言 Intel LASS 是在 Arrow Lake 引入的内存隔离防护机制,它的作用有些类似 SMAP 和 SMEP,可以用来控制内存访问权限,本篇将简单说明一下它的用途与基本用法。 访问权限 在早期的 x64 分页模式下,内存的访问权限由页表项中的 U/S 位控制: 置位状态下,代表当前页面属于 User Mo...

在内核中免不了要调用 ZwAllocateVirtualMemory 为进程申请内存,申请的内存属性一般会为 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE,而在二月份的某一天里,我的群友发现对某个游戏申请的 PAGE_EXECUTE_READWRITE 属性内存,是无法写入的,一旦写入会导致进程直接崩溃,无论是内核模式写入还是用户模式写入。 ZwAlloc...

本文内容仅适用于 Delivery Mode 为 Fixed 的中断消息。 本文将简单介绍 xAPIC 和 x2APIC 中外部中断的接收过程,分为三个阶段,并说明各个阶段中寄存器的状态。 Interrupt Acceptance 当一个外部中断路由到当前核心,并且当前核心是中断目标的时候,将 IRR 对应的 Vector 置位,让中断处于 Pending 状态,这个阶段不会受到 ...

引言 阅读本文内容需要了解 Windows 内核,否则大概率会一脸懵逼。 相信搞 Windows 内核驱动开发的,都或多或少听说过 IRQL 这个东西,它的范围在 0H~0FH ,数值越大优先级越高,高优先级中断可以打断低优先级代码的执行,如果 IRQL 为 0FH,则相当于清除了 EFlags.IF,代码的执行永远不会被打断,NMI 除外。 而 IRQL 在 x64 下...

在阅读本篇内容前,需要读者对 x64 架构有基本的了解。 引言 Intel MPK(Memory Protection Keys)是一种轻量级内存保护机制,它的核心优势在于无需修改页表,即可动态控制内存页的访问权限,这避免了传统内存权限修改页表项需要刷新 TLB 所带来的性能开销。 配置 功能 支持 控制寄存器 ...

众所周知,UEFI 的调试其实是极其麻烦的事情(实际上开发过程中使用的 EDK2 工具链用起来也非常蛋疼,这里就不细说了),本篇将介绍 Windows 下使用 VMware 进行源码级调试的方法,且其他平台下也可以同样适用。 环境 GDB (要求 10.1 版本以上,后续我会说原因) Visual Studio Code (作为源码级调试的前端) VMware Workst...