malloc 是否具有确定性?假设我有一个 fork 的进程,即另一个进程的副本,并且在某个时刻它们都调用了 malloc 函数。在两个过程中分配的地址是否相同?假设执行的其他部分也是确定性的。

注意:在这里,我只谈论虚拟内存,而不是物理内存。

最佳答案

完全没有理由要使它具有确定性,实际上,如果不具有确定性,可能会有一些好处,例如increasing the complexity of exploiting bugs(另请参见this paper)。

这种随机性有助于使漏洞更难编写。要成功利用缓冲区溢出,通常需要做两件事:

  • 将有效负载传送到可预测/已知的内存位置
  • 使执行跳转到该位置

  • 如果内存位置不可预测,则跳转会变得非常困难。

    标准§7.20.3.3/2中的相关引用:



    如果是要使其具有确定性,那么可以这样明确地指出。

    即使今天看起来是确定性的,我也不会打赌它会保留下来,所以使用更新的内核或更新的libc/GCC版本。

    10-04 21:55