如何执行内存访问控制?

问题描述 投票:0回答:2

在我的信息安全课程教科书中,它提到了:对象重复使用

为了防止对象重复使用泄漏,操作系统清除(即覆盖)所有空间 在允许下一个用户访问它之前,请重新分配。

在那种情况下,为什么允许距离内存访问?

int a[10]; printf("%d", a[11]);
该程序提供从内存界外访问的随机数据。
我希望:

为此,OS不允许这样做。

如果发生这种情况,我们得到的值全部为零。
    thy为什么由诸如RUST之类的语言实现而不是OS来控制的界内内存访问?
  1. 内存访问在OS级别上工作的原因是,内存保护是在页面级上实现的,如果[11]在同一分配的页面内,则OS不会将其视为非法访问,因为它仍然在过程允许的内存中,这就是为什么它允许的原因。

我认为,从操作系统的角度来看,您认为被认为是安全的,而与编程语言认为安全的内存访问的方式存在混乱。

当您通过执行程序创建过程时,操作系统必须为过程提供一些可用的内存区域。 只要您访问属于您的过程的记忆页面(请参阅什么是分页?
c security operating-system
2个回答
2
投票
任何值得盐的C编译器都会警告您有关编译过程中明显的过失内存访问(例如程序),但它仍将编译您的代码。当您运行程序并在情况下访问

a[11]

时,您可能会随机垃圾或零值,甚至可以根据您的分配范围进行多远。如果您经过堆栈的分配区域(例如

0
投票
),几乎可以肯定会触发分段故障。

提到,该操作系统在页面中管理内存(通常是4KIB块),并且仅在尝试访问不属于您的过程或不正确权限的页面时就进入了步骤。 lust甚至没有使用如此明显的不安全内存访问来编译程序,不是因为操作系统可以防止它,而是因为语言理念与C的不同,而在高度上,默认情况下会执行内存安全。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.