我想通过使用malloc和自由钩来监视应用程序中malloc和free的使用。使用glibc malloc挂钩以线程安全的方式
这里的文档http://www.gnu.org/s/libc/manual/html_node/Hooks-for-Malloc.html
从示例页面,你可以看到my_malloc_hook
瞬时切换的malloc重新调用malloc的前摘机(或在链中前钩)。
当监视多线程应用程序时,这是一个问题(请参阅问题的结尾处的解释)。
我在互联网上找到的使用malloc挂钩的其他例子也有同样的问题。
有没有办法重写这个函数在多线程应用程序中正常工作?
例如,是否有malloc挂钩可以调用的内部libc函数来完成分配,而无需停用我的挂钩。
由于公司法律政策,我无法看看libc源代码,所以答案可能很明显。
我的设计规范说我不能用一个不同的malloc设计替换malloc。
我可以假设没有其他钩子在场。
UPDATE
由于在维修中的malloc malloc的挂钩暂时删除,另一个线程可以调用malloc,并没有得到钩。
有人建议malloc有一个大的锁,可以防止这种情况发生,但它没有记录,而且我有效地递归调用malloc的事实表明任何锁必须在挂钩之后存在,或者是快活的聪明:
caller ->
malloc ->
malloc-hook (disables hook) ->
malloc -> # possible hazard starts here
malloc_internals
malloc <-
malloc-hook (enables hook) <-
malloc
caller
如果我们其中一个人查看libc源代码并根据它给出信息,您将合法地处于相同的位置。 – 2010-01-07 14:48:28
为什么你不看* libc源代码? – Will 2010-01-07 14:55:01
因为我可能会用GPL代码污染我们的专有代码。简单地被告知一个特定的功能会做我想做的事情,但没有这个问题。 – 2010-01-07 15:13:15