一尘不染

malloc是确定性的吗?

linux

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

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


阅读 220

收藏
2020-06-07

共1个答案

一尘不染

完全没有理由要使它具有确定性,实际上,没有确定性可以带来一些好处,例如,增加利用漏洞的复杂性(另请参见本文)。

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

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

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

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

malloc函数为大小由大小指定且值不确定的对象分配空间

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

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

2020-06-07