压倒'免费'或者'删除'使用LD_PRELOAD&对dlsym()

时间:2013-06-22 09:53:58

标签: c++ c free dynamic-linking dlsym

Overriding 'malloc' using the LD_PRELOAD mechanism

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

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

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

1 个答案:

答案 0 :(得分:3)

它不能。

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

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

 free(do_something()); 

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