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

dev*_*ull 7 malloc macos 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.
Run Code Online (Sandbox Code Playgroud)

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

bda*_*ash 9

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