windows进程内存布局

Pyj*_*ong 5 assembly memory-layout ollydbg

所以我正在使用Olly调试器,嗅探我能找到的关于Windows的内容,然后按下M按钮,它弹出了内存映射窗口.所以我搜索了一些关于这个主题的文章,我发现我实际上可以写到64K以上的地址,我试过并且很好..为什么它不起作用.关于那些较低的2GB空间:

  • 为什么会出现这些差距?例如,有0x10000-0x1FFFF R/Wable空间然后没有128K,然后是一些可读空间.我的意思是这已经被正确分页了,所以在物理空间中是否存在过去的事情并不重要(不要提到0x20000-0x40000应该完全没有r/w),为什么有人决定不如此随机使用一些地址空间?很可能我只是感到困惑,因为在olly调试器的内存映射中,很多行都是空的,其中列是'Contains'.是否可能有一些参考我可以从olly反对这个内存映射,并找出什么空间有什么目的,因此是或不是这样的分页?

  • 假设我真的不想搞任何关于内存管理的问题,是否可以使用较低内存而不是使用堆来编写Windows程序,或者我是否会遇到一些问题?

感谢您阅读此问题.

编辑

,我们这里的内容是0x10000,这也可能是该页面可写的原因.

ade*_*hus 1

并非所有内存都可供应用程序使用。例如,某些类型的硬件需要内存,因此系统(BIOS 或操作系统)将分配一块物理内存并将其留给硬件进行自我管理。该内存可能无法直接读取(或写入),因为执行此类操作会影响硬件。硬件本身可能对其可以使用的内存范围有其自身的限制。

如果你在 Windows 中,你不能写入任意内存位置 - 操作系统不会让你(至少在用户模式下)并且无论如何都会对内存进行分页,所以你认为你正在查看的地址(虚拟地址)与实际物理内存地址不匹配。

一般来说,您应该只读取和写入操作系统已请求并分配给您的内存。