malloc 是确定性的吗?假设我有一个分叉的进程,即另一个进程的副本,并且在某个时候它们都调用了 malloc 函数。在两个过程中分配的地址是否相同?假设执行的其他部分也是确定性的。
注意:在这里,我只谈论虚拟内存,而不是物理内存。
完全没有理由要使它具有确定性,实际上,没有确定性可以带来一些好处,例如,增加利用漏洞的复杂性(另请参见本文)。
这种随机性可能有助于使漏洞更难编写。要成功利用缓冲区溢出,通常需要做两件事:
如果内存位置不可预测,则跳转变得非常困难。
标准§7.20.3.3/ 2中的相关引用:
malloc函数为大小由大小指定且值不确定的对象分配空间
如果要使其具有确定性,那么可以这样明确地指出。
即使今天看起来是确定性的,我也不会打赌它会保留下来,所以使用更新的内核或更新的libc / GCC版本。