问题描述
我使用 MmAllocateContiguousMemory 分配页面并获取页面物理地址。
我给页表加了1对1的映射(新的虚拟地址和物理地址一样)。
新的虚拟地址清除了第 32-63 位。
我将 shellcode 写入新的虚拟地址。
我尝试执行 shellcode 并获得 KERNEL_SECURITY_CHECK_FAILURE。
如果我将物理地址映射到内核地址范围内的某个虚拟地址,shellcode 会执行得很好。
如何调用这种保护/行为?
我以为是 SMEP,但禁用它不会改变任何事情。
解决方法
没关系,pml4 条目已经存在并且设置了 nx 位。