malloc是确定性的吗?

金属牧师

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

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

柔印:

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

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

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

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章