【发布时间】:2022-08-24 20:57:45
【问题描述】:
在 C 中,有些情况下内存未初始化并且可能包含“垃圾”。那是什么“垃圾”?它不是空值,因为那将是空值初始化。它不是随机的,因为那也是一种初始化形式。之后怎么样了?从安全的角度来看,访问这个“垃圾”的意义是什么?
在 C 中,有些情况下内存未初始化并且可能包含“垃圾”。那是什么“垃圾”?它不是空值,因为那将是空值初始化。它不是随机的,因为那也是一种初始化形式。之后怎么样了?从安全的角度来看,访问这个“垃圾”的意义是什么?
要看。
如果我们谈论为进程新保留的内存页面,它很可能在现代通用操作系统上为零,因为其他任何东西都可能是信息泄漏(来自另一个进程或操作系统本身)。在进程生命周期中较早使用的内存可能具有之前的任何值。
不过没关系,重点是你不知道里面有什么。您不能明智地将数据用于任何事情。如果您设法读取这些位并将它们用作例如一个指针,该指针可能会指向未映射的内存,从而导致崩溃,或者在某个其他内存对象的中间,可能会导致损坏或在不相关的地方崩溃。
但是,如果您询问 C,访问未初始化的内存会产生未定义的结果,您不知道它们是什么。编译器可能会在假设您不会这样做的情况下进行优化,它可能会积极地这样做,并且结果可能是您不会期望从该位置读取的任何特定值的结果。换句话说,结果是未定义的。
从安全的角度来看,崩溃和损坏显然是问题,未定义的行为也是如此。
【讨论】: