libgmalloc如何使用两级命名空间?

时间:2013-12-04 22:14:27

标签: macos malloc mach-o dyld

我想用调试目的编写自己的malloc / free函数,文档说我必须使用DYLD_FORCE_FLAT_NAMESPACE和DYLD_INSERT_LIBRARIES。但与此同时,libgmalloc文章明确指出:

libgmalloc is available in /usr/lib/libgmalloc.dylib.  To use it, set this environment variable:
       set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib
 Note:  it is no longer necessary to set DYLD_FORCE_FLAT_NAMESPACE.

问题是:如何在DYLD_FORCE_FLAT_NAMESPACE中删除必要性?如果我不强制命名空间平整度,则不使用我自己的库中的malloc。

1 个答案:

答案 0 :(得分:8)

您需要使用dyld插入。这包括在动态库的__interpose段中生成包含替换/替换函数地址对的特殊__DATA部分。来自dyld源的private dyld-interposing.h标头包含一个方便的宏来帮助解决这个问题,以及示例用法。