Windows内存管理

Windows内存管理,windows,memory,memory-management,Windows,Memory,Memory Management,我对Windows内存管理有点困惑 我在某个地方读到,Windows中的每个进程(32位)都有自己的4GB内存,这要归功于交换到磁盘。但32位Windows最多可以使用4GB。所以我认为每个进程只“认为”它有4GB,但实际上它的容量更少。 我说得对吗 那么我如何从一个进程访问另一个进程的数据呢?如果2个PE以0x400000的速度加载,我该怎么做?你能给我举个C或ASM的例子吗 谁能给我进一步解释一下吗?也许可以给我指一些好文章 简单的描述就足够了:)。 谢谢。进程最多可以寻址4 GB的地址,这

我对Windows内存管理有点困惑

我在某个地方读到,Windows中的每个进程(32位)都有自己的4GB内存,这要归功于交换到磁盘。但32位Windows最多可以使用4GB。所以我认为每个进程只“认为”它有4GB,但实际上它的容量更少。 我说得对吗

那么我如何从一个进程访问另一个进程的数据呢?如果2个PE以0x400000的速度加载,我该怎么做?你能给我举个C或ASM的例子吗

谁能给我进一步解释一下吗?也许可以给我指一些好文章

简单的描述就足够了:)。
谢谢。

进程最多可以寻址4 GB的地址,这些地址由或不由“真实”内存支持。Windows操作系统,即使是32位,也可以处理超过4GB的地址,但可能有理由限制这个数量,或者限制是由硬件规定的

  • :
32位Microsoft Windows上的每个进程都有自己的虚拟地址空间,可以寻址多达4G的内存。[……]

  • -第9章:内存管理

不要混淆地址空间和物理内存量。我如何判断地址是虚拟地址还是物理地址?你能给我举个asm的例子吗?例如,JMP XXX或呼叫XXX-我如何知道内存XXX是什么?或者我只是错过了什么。如果我想从我的程序(该程序也是在0x400000加载的)的ImageBase 0x400000加载的DLL中访问函数,该怎么办?用户模式应用程序不直接处理物理内存。无论是否在asm中,您只需使用您知道的地址。也就是说,您从
VirtualAlloc
获得了一个指针—您可以使用它。操作系统和内核模式组件为您将虚拟地址映射到实际内存中。你不能只是点击未知的[内存]地址,然后期望它以某种方式工作。好的,我明白了。但是如何访问另一个进程的内存?还是DLL的?DLL是否再次加载到使用它的每个进程中?如果我的应用程序使用例如Kernel32.dll(几乎总是在Windows上使用),我是访问我的应用程序的虚拟地址空间还是访问其他应用程序的虚拟地址空间?是否有共享地址空间?为每个进程加载相同的DLL xxx次似乎毫无意义。除非您想编写驱动程序,而且我确信您不想,否则您可以使用
ReadProcessMemory
API