gpt4 book ai didi

c++ - 一个进程可以从它的虚拟内存中的任何地址读/写吗?

转载 作者:太空狗 更新时间:2023-10-29 19:47:55 24 4
gpt4 key购买 nike

操作系统中的进程有自己的虚拟地址空间。比如说,我在 c 程序中使用 malloc() 函数调用分配了一些动态内存,并从它返回的地址中减去一些正值(比如 1000)。现在,我尝试阅读该位置上写的内容应该没问题,但是写入该位置呢?

虚拟地址空间也有一些只读内存块。它如何保护它?

最佳答案

TL;DR 不,这是不允许的。


在你的例子中,当你得到一个有效的非 NULL 指针指向由 malloc() 返回的内存地址时,只有请求的内存大小被分配给你的进程,你可以仅使用(读取和/或写入)那么大的空间。

一般来说,任何分配的内存(编译时或运行时)都有一个关联的大小。 overrunningunderruning 分配的内存区域被视为无效内存访问,这会调用 undefined behavior .

即使内存可访问的并且在进程地址空间内,也没有什么可以阻止操作系统/内存管理器返回指向那个特定地址的指针,所以, 最好,您之前的写入将被覆盖,或者您将覆盖其他一些值。最坏的情况,如前所述,UB。

关于c++ - 一个进程可以从它的虚拟内存中的任何地址读/写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com