Overriding 'malloc' using the LD_PRELOAD mechanism
LD_PRELOAD如何用于将ptr设置为NULL或任何其他内存地址,以避免悬空的指针漏洞。

void free(void *ptr)
{
    real_free(ptr);

    ptr = NULL // will only set local ptr to NULL
}

最佳答案

这不可以。

使用LD_PRELOAD可以覆盖符号,例如函数。要更改传递给free()的指针,您需要访问free()调用者的变量才能将其设置为NULL。但是您只能访问传入的指针的副本。

请注意, call 者甚至可能会执行以下操作:

 free(do_something());

在这种情况下,没有变量可以设置为NULL

07-24 09:46
查看更多