2

如果我用 C 编写一个程序并在 Windows 中运行它,Win API 中是否有一些东西可以指示程序是否可以访问某个内存块?如果我希望能够让程序访问我想要的任何内存块,有什么我必须禁用的吗?我意识到这是有风险的,可能会损坏操作系统。

4

3 回答 3

1

是的,这可以通过分配虚拟内存页面的低级函数 VirtualAlloc() 实现。flProtect 参数指定进程如何访问内存,指定 PAGE_NOACCESS 是可能的,尽管它并不经常使用。

如果您实际上是在谈论RAM,那么不,用户模式程序永远无法直接访问受保护模式操作系统(如 Windows)上的物理内存。它只能寻址虚拟内存,到 RAM 的映射由操作系统内核执行。只有在 ring 0 中运行的代码才有这个能力。拒绝访问某些物理地址只对内存映射 I/O 设备有意义。它已经有一个保留地址空间的驱动程序。

于 2012-09-03T20:47:18.443 回答
1

在现代 Windows(带有 NT 内核的 Windows)中,操作系统控制访问内存的方式。所以,答案是:。您对此无能为力。您将无法让您的进程访问您想要的任何内存块。

你本可以在 Win 3.0、Win 3.11、Win 95、Win 98、Win ME 中做到这一点。

于 2012-09-03T19:05:12.577 回答
0

您不能/不会/不得访问内核内存。现代操作系统(内核模式除外)不允许从这些内存区域进行分配。

于 2012-09-03T19:04:34.463 回答