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

Ale*_*lex 5 c linux malloc

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

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

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

memory_check <executable name>
Run Code Online (Sandbox Code Playgroud)

我无法访问可执行文件源的地方.

首先我应该尝试拦截系统调用.但我读到" 所以malloc不会调用任何系统调用? "它似乎不是一个想法,也因为它会极大地减慢所有系统(我可以想象).

是否还有其他选项来拦截malloc()电话?

cni*_*tar 5

如果您愿意更改界面,LD_PRELOAD=mymalloc.so <executable>可以这样做:

  • 创建一个共享库
    • 获取一个句柄malloc使用dlsym
    • 暴露外部 void *malloc(size_t size)
    • malloc通过上面获得的句柄调用real ,并存储调试信息

然后:

  • 打电话给程序 LD_PRELOAD=mymalloc.so ./program
  • 该程序会自动调用您的"被劫持"版本 malloc

编辑

如果你不想改变你的界面但想要使用这个技巧,你可以创建一个包装器程序fork(2),设置LD_PRELOAD然后使用它的名称执行你的真实程序.