assembly C windows进程内存布局
Windows的内容,然后按下M按钮,它弹出了内存映射窗口.所以我搜索了一些关于这个主题的文章,我发现我实际上可以写到64K以上的地址,我试过并且
|
所以我正在使用Olly调试器,嗅探我能找到的关于 Windows的内容,然后按下M按钮,它弹出了内存映射窗口.所以我搜索了一些关于这个主题的文章,我发现我实际上可以写到64K以上的地址,我试过并且很好..为什么它不起作用.关于那些较低的2GB空间: >为什么会出现这些差距?例如,有0x10000-0x1FFFF R / Wable空间然后没有128K,然后是一些可读空间.我的意思是这已经被正确分页了,所以在物理空间中是否存在过去的事情并不重要(不要提到0x20000-0x40000应该完全没有r / w),为什么有人决定不如此随机使用一些地址空间? 感谢您阅读此问题. 编辑 啊here我们用的是0x10000,这也可能是为什么那个页面是可写的. 你似乎没有一个专注的问题,所以很难提供有价值的答案.但是,您似乎暗示了Windows如何映射用户空间内存的问题?首先,低的虚拟内存空间 C 从零到64K或更多 C 未被分配以捕获基于NULL的指针解除引用.这些是我们想要立即了解的常见编程错误.如果发生这种情况,该程序几乎肯定会终止.通过将此空间保留为未映射,将发生Windows等效的SEGFAULT.很有用. 通常,接下来分配代码和常量空间.一旦程序开始运行,通常不需要更改此空间,因此它被设置为只读,并且其中的一部分被标记为可执行 C 通常是第一部分,可以是99%的空间.如果存在共享代码库,则这些代码库在主代码(通常)之后映射,通常具有小间隙,以便库代码段是页面对齐的(可能是4K,可能是64K或更大),以实现高效的内存管理寄存器使用.几乎不需要节省虚拟内存空间. 之后是数据空间.这可以是初始化的内存,也可以是未初始化的.这一切都必须是可读写的.它需要在它上面保留空间,以便它可以增加堆空间的增长. 数据空间以上的方式是堆栈空间.它必须是可读写的,并且在它下面有空间,所以它可以增长.所有现代CPU堆栈都向低内存增长. 堆栈上方是系统空间. 如果进程请求访问共享内存(与其他进程),则映射窗口的大小决定了它可以适合的内存映射中的位置.映射太靠近堆增长的位置是一个问题,而且太接近潜在的堆栈增长也是一个问题.幸运的是,相当简单的放置算法可以解决绝大多数程序的问题.只需考虑各种需求,您就可以弄清楚操作系统为什么会这样做. (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 如何隐藏批量输出
- win10系统出现拒绝访问是如何处理的
- Windows系统·添加Python import 的库/模块路径
- 10053 您的主机中的软件中止了一个已建立的连接
- xaml – 如何将我的视图模型中的富文本(FlowDocument?)绑定
- 在Windows上如何使用Docker Compose搭建多个容器环境
- windows – 如何停止’gem’实用程序访问我的主目录?
- 获取与Windows Vista上的C#.Net连接的无线网络的SSID
- winapi – Windows SDK 7.0的signtool中的signwizard发生了
- windows – dokan sshfs有多稳定?
- https – 如何在非Windows平台上忽略“System.Ne
- winapi – Windows SDK 7.0的signtool中的signwi
- 如何在Windows上使用Docker搭建持续集成环境
- 身份验证错误 要求的函数不受支持 Windows远程桌
- Vulkan Tutorial 01 开发环境搭建之Windows
- windows – 为什么模拟会话中定义的DOS设备不会出
- windows – Win32:窗口在整个生命周期内都有相同
- windows C 如何通过apt-cyg安装cygwin / X
- windows – 是否可以将kubernetes作为docker容器
- Windows 10 下彻底关闭 Hyper-V 服务
