我知道在32位架构中,内核模式虚拟内存映射在0x80000000
和0xFFFFFFFF
之间。
它包含一些结构EPROCESS
,ETHREAD
...等,以及当前进程的页面目录和表。
尝试获取某个函数的虚拟地址时,ntoskrnl让我们说“nt!NtReadFile”我发现它已经映射到内核虚拟地址0x89421130
中。
我试图在RET
之后使用随机指令修补一些nops,当切换到另一个进程上下文时,我发现我放的指令仍在那里。
这是否意味着加载Ntoskrnl的虚拟内存在每个进程虚拟地址空间中保持不变?
感谢。
答案 0 :(得分:3)
这是否意味着加载Ntoskrnl的虚拟内存在每个进程虚拟地址空间中保持不变?
是。在正在运行的Windows系统上,内存中有一个内核副本,并且完全相同的内核地址空间(即32位上的0x80000000-0xFFFFFFFF
)映射到每个进程。