1

使用 LD_PRELOAD 机制覆盖“malloc”

如何LD_PRELOAD设置ptr为 NULL 或任何其他内存地址以避免悬空指针攻击。

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

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

1 回答 1

3

这不可以。

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

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

 free(do_something()); 

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

于 2013-06-22T10:11:07.933 回答