我想写一个"简单"的内存泄漏检查器.
为了做到这一点,我需要计算一个程序中的一些malloc()ed内存块,但问题是我不想修改它的源代码.
换句话说,我想实现以下接口:
memory_check <executable name>
Run Code Online (Sandbox Code Playgroud)
我无法访问可执行文件源的地方.
首先我应该尝试拦截系统调用.但我读到" 所以malloc不会调用任何系统调用? "它似乎不是一个想法,也因为它会极大地减慢所有系统(我可以想象).
是否还有其他选项来拦截malloc()电话?
如果您愿意更改界面,LD_PRELOAD=mymalloc.so <executable>可以这样做:
malloc使用dlsymvoid *malloc(size_t size)malloc通过上面获得的句柄调用real ,并存储调试信息然后:
LD_PRELOAD=mymalloc.so ./programmalloc如果你不想改变你的界面但想要使用这个技巧,你可以创建一个包装器程序fork(2),设置LD_PRELOAD然后使用它的名称执行你的真实程序.