gpt4 book ai didi

c++ - Windows 10 是否会防止您访问其他程序正在使用的内存?

转载 作者:可可西里 更新时间:2023-11-01 09:47:20 27 4
gpt4 key购买 nike

以下 C++ 代码有效:

int *p = new int;
p[1000] = 12;

意思是我访问了一个距离 p sizeof (int) * 1000 字节的内存位置。

我在想,也许 Windows 或任何其他程序当前正在使用内存位置 &p[1000] 做某事。如果我厌倦了将 p[1000] 设置为新值,那么可能正在使用该位置保存一些内存的另一个程序甚至 Windows 可能会崩溃,因为我更改了该程序的一个重要变量。

由于 C++ 不禁止这样做,我想知道至少 Windows 是否有某种保护措施来防止程序使用其他人当前使用的内存位置。

最佳答案

在 Windows(和所有其他现代消费者操作系统)上写入不属于您的内存地址不会直接影响属于任何其他进程的内存。

但是,操作系统可能正在使用该内存为您的程序提供基本服务,或者该地址可能根本无效,因此覆盖您不拥有的地址可能会导致 < em>您的程序立即或在未来某个不可预测的时间点崩溃或以意想不到的方式运行。谷歌“未定义的行为”以获得更多关于为什么这是一件坏事的讨论。

在 Windows 的情况下,我模糊地记得 GUI 使用一些用户模式共享内存(为了效率)所以如果你真的不走运,那么写入错误的地址可能会导致其他 GUI 程序出现故障,或者也许甚至整个 GUI 都变得无响应,从用户的角度来看,这看起来非常类似于操作系统挂起。不过,我认为我从未见过这种情况,所以也许我的信息已经过时,或者存在保护机制来降低这种情况的可能性。 (这并不代表安全漏洞,因为它只会影响用户的其他程序,而恶意程序可以通过许多其他更可靠的方式达到相同的效果。)

关于c++ - Windows 10 是否会防止您访问其他程序正在使用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958221/

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