c++ - Windows 虚拟内存和内核模式

标签 c++ c windows memory internals

我知道在 32 位架构中,内核模式虚拟内存映射在 0x800000000xFFFFFFFF 之间。

它包含一些结构,例如 EPROCESSETHREAD ...等,以及当前进程的页目录和表。

当尝试获取某个函数的虚拟地址是 ntoskrnl 时,比如说“nt!NtReadFile”,我发现它被映射到内核虚拟地址 0x89421130 中。

我尝试使用随机指令在 RET 之后修补一些 nops,当切换到另一个进程上下文时,我发现我放置的指令仍然存在。

这是否意味着加载 Ntoskrnl 的虚拟内存在每个进程虚拟地址空间中保持不变?

谢谢。

最佳答案

Does that mean that virtual memory where Ntoskrnl is loaded stays unchanged in every process virtual address space?

是的。在运行的 Windows 系统上,内存中存在一份内核拷贝,并且完全相同的内核地址空间(即 32 位上的 0x80000000-0xFFFFFFFF)被映射到每个进程。

关于c++ - Windows 虚拟内存和内核模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396475/

相关文章:

c++ - 处理大量变量声明

c++ - 重载。 -> 和::用于多平台类(class)

c++ - 在 VS2010 控制台应用程序中链接 windows.h (WNDCLASSEX) 代码

c - 注释中的 "@(#)<filename>"是什么意思?

c - gcc错误编译文件

创建一个随机数数组并在 C 中返回该数组

windows - 获取屏幕分辨率作为cmd中的变量

c++ - 即使在 header 中,另一个类也无法识别的类

java - (错误)无法找到或加载主类

python - 适用于 Ubuntu 和 Windows 的相同 python 库列表