【问题标题】:What does uninitialised memory contain?未初始化的内存包含什么?
【发布时间】:2022-08-24 20:57:45
【问题描述】:

在 C 中,有些情况下内存未初始化并且可能包含“垃圾”。那是什么“垃圾”?它不是空值,因为那将是空值初始化。它不是随机的,因为那也是一种初始化形式。之后怎么样了?从安全的角度来看,访问这个“垃圾”的意义是什么?

    标签: security memory c


    【解决方案1】:

    要看。

    如果我们谈论为进程新保留的内存页面,它很可能在现代通用操作系统上为零,因为其他任何东西都可能是信息泄漏(来自另一个进程或操作系统本身)。在进程生命周期中较早使用的内存可能具有之前的任何值。

    不过没关系,重点是你不知道里面有什么。您不能明智地将数据用于任何事情。如果您设法读取这些位并将它们用作例如一个指针,该指针可能会指向未映射的内存,从而导致崩溃,或者在某个其他内存对象的中间,可能会导致损坏或在不相关的地方崩溃。

    但是,如果您询问 C,访问未初始化的内存会产生未定义的结果,您不知道它们是什么。编译器可能会在假设您不会这样做的情况下进行优化,它可能会积极地这样做,并且结果可能是您不会期望从该位置读取的任何特定值的结果。换句话说,结果是未定义的。

    从安全的角度来看,崩溃和损坏显然是问题,未定义的行为也是如此。

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多