Windows - 此内存寻址如何工作?
Posted
技术标签:
【中文标题】Windows - 此内存寻址如何工作?【英文标题】:Windows - How does this memory addressing work? 【发布时间】:2013-11-29 05:17:29 【问题描述】:假设 x86,我开始了解到地址 0x0 到 0x7FFFFFFF 用于进程;而任何更高的都是为内核保留的。
我有三个好奇心:
1) 进程是否调用了高于 0x7FFFFFFF 的地址?我认为它总是会导致某种访问被拒绝?拒绝访问是如何强制执行的?
2)“共享内存”IPC 是否通过将两个进程的虚拟地址映射到相同的物理地址范围来工作?
3) 您机器中的 RAM 容量可能会有所不同。您可能有 2GB,或者更像 16GB。这对 RAM 的寻址有何影响?内核是否曾经因为它是为自己保留但不需要它而留下一堆未使用的 RAM?我怎么能看到这个?
【问题讨论】:
【参考方案1】:我不太确定,但你会在这个MSDN doc 中找到关于它如何工作的最大值:-
进程可用的虚拟地址范围是 称为进程的虚拟地址空间。每个用户模式 进程有自己的私有虚拟地址空间。对于 32 位 进程,虚拟地址空间通常是 2GB 范围 0x00000000 到 0x7FFFFFFF。对于 64 位进程,虚拟 地址空间是 8 TB 范围 0x000'00000000 到 0x7FF'FFFFFFFF。一系列虚拟地址有时称为 虚拟内存范围。
下图显示了两个 64 位进程的虚拟地址空间: Notepad.exe 和 MyApp.exe。每个进程都有自己的虚拟地址 从 0x000'0000000 到 0x7FF'FFFFFFFF 的空间。每个阴影 块表示一页(大小为 4 KB)的虚拟或物理 记忆。请注意,记事本进程使用三个连续的页面 虚拟地址,从 0x7F7'93950000 开始。但是那三个 虚拟地址的连续页面映射到非连续的 物理内存中的页面。另请注意,两个进程都使用一个页面 从 0x7F7'93950000 开始的虚拟内存,但那些虚拟页面 映射到物理内存的不同页面。
【讨论】:
以上是关于Windows - 此内存寻址如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Visual C++ 2010 使用此汇编语法进行内存寻址?
Windows 逆向内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
Windows 逆向CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )
Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( 逐层分析分析 静态地址 到 动态地址 的寻址 + 偏移 过程 ) ★