重写“自由”或“删除”使用LD_PRELOAD&的dlsym()

问题描述:

Overriding 'malloc' using the LD_PRELOAD mechanism重写“自由”或“删除”使用LD_PRELOAD&的dlsym()

如何LD_PRELOAD用于设置ptr为NULL或任何其他的存储器地址,以避免悬挂指针漏洞。

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

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

为什么不是'删除ptr'? – mrz

+0

@mrz因为问题也被标记为C. –

它不能。

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

注意,调用者甚至可能会做一些如:

free(do_something()); 

在这种情况下,不存在变量设置为NULL