c -计算用malloc()从外部程序分配的块



我想写一个"简单的"内存泄漏检查器。

为了做到这一点,我需要计算程序中malloc() ed内存块的数量,但问题是我不想修改它的源代码。

换句话说,我想实现以下接口:

memory_check <executable name>

我不能访问可执行文件的源文件

首先,我应该尝试拦截一个系统调用。但是我读到"所以malloc不调用任何系统调用?",这似乎不是一个想法,也因为它会极其缓慢的所有系统(我可以假设)。

是否有其他选项拦截malloc()呼叫?

如果你愿意改变你的接口为LD_PRELOAD=mymalloc.so <executable>,你可以这样做:

    创建一个共享库
    • 使用dlsym获取malloc的句柄
    • 显示外部void *malloc(size_t size)
    • 通过上面获得的句柄调用真正的malloc,并且还存储您的调试信息

:

    调用程序LD_PRELOAD=mymalloc.so ./program
  • 程序自动调用您的"被劫持";malloc版本

编辑

如果你不想改变你的接口,但想使用这个技巧,你可以做一个包装程序fork(2) s,设置LD_PRELOAD,然后使用它的名字执行你的真正的程序。

如果可执行文件是动态链接的,那么您可以编写自己的malloc,并将其构建到。so中,在您自己的malloc中,您可以简单地增加计数器:

#ifdef malloc
#undef malloc
#endif
static int count;
void *malloc(size_t size)
{
    count++;
    return _malloc(size);
}
使用LD_PRELOAD预加载malloc。

相关内容

  • 没有找到相关文章

最新更新