【问题标题】:Overriding 'free' or 'delete' using LD_PRELOAD & dlsym()使用 LD_PRELOAD 和 dlsym() 覆盖“免费”或“删除”
【发布时间】:2013-06-22 09:53:58
【问题描述】:

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
}

【问题讨论】:

  • 为什么不delete ptr?
  • @mrz 因为问题也被标记为 C

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


【解决方案1】:

它不能。

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

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

 free(do_something()); 

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

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2013-03-14
    • 2019-10-16
    • 1970-01-01
    • 2011-03-12
    • 2020-12-15
    • 2011-12-10
    • 2017-12-28
    相关资源
    最近更新 更多