浅谈 | Intel LASS
在阅读本篇内容前,需要读者对 x64 架构有基本的了解。 引言 Intel LASS 是在 Arrow Lake 引入的内存隔离防护机制,它的作用有些类似 SMAP 和 SMEP,可以用来控制内存访问权限,本篇将简单说明一下它的用途与基本用法。 访问权限 在早期的 x64 分页模式下,内存的访问权限由页表项中的 U/S 位控制: 复位状态下,代表当前页面属于 U...
技巧 | Windows可执行内存的写入防护
在内核中免不了要调用ZwAllocateVirtualMemory为进程申请内存,申请的内存属性一般会为 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE,而在二月份的某一天里,我的群友发现对某个游戏申请的 PAGE_EXECUTE_READWRITE 属性内存,是无法写入的,一旦写入会导致进程直接崩溃,无论是内核模式写入还是用户模式写入。 ZwAllocat...
浅谈 | APIC的中断处理
本文内容仅对于Delivery Mode为Fixed的中断消息。 本文将简单介绍在xAPIC x2APIC 的外部中断的接收过程,分为三个阶段,并说明各个阶段中寄存器的状态。 Interrupt Acceptance 当一个外部中断路由到当前核心,并且当前核心是中断目标的时候,将IRR对应的Vector置位,让中断处于Pending状态,这个阶段不会受到PPR,EFLA...
详解 | Windows分页内存访问
引言 阅读本文内容需要了解Windows内核,否则大概率会一脸懵逼。 相信搞Windows内核驱动开发的,都或多或少听说过 IRQL 这个东西,它的范围在 0H~0FH ,数值越大优先级越高,高优先级中断可以打断低优先级代码的执行,如果 IRQL为 0FH,则相当于清除了 EFlags.IF,代码的执行永远不会被打断,NMI 除外。 而 IRQL在x64下还有一个名字叫 ...
浅谈 | Intel MPK
引言 Intel MPK(Memory Protection Keys) 是 Intel 推出的一种内存保护机制,可以在不修改页表的情况下,来控制线性地址所关联物理页的访问权限,本篇将说明一些基本用法和用途,在阅读本篇内容前,需要读者对 x86/x64 架构有基本的了解。 说明 CPUID.(EAX=07H,ECX=0H):ECX.OSPKE [bit 4]) ...
浅谈 | Windows下进行UEFI源码级调试
众所周知,UEFI 的调试其实是极其麻烦的事情(实际上开发过程中使用的 EDK2 工具链用起来也非常蛋疼,这里就不细说了),本篇将介绍 Windows 下使用 Vmware 进行源码级调试的方法,且其他平台下也可以同样适用。 环境 GDB (要求 10.1 版本以上,后续我会说原因) Visual Studio Code (作为源码级调试的前端) VMware Workst...