我想用调试目的编写自己的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。
答案 0 :(得分:8)
您需要使用dyld插入。这包括在动态库的__interpose
段中生成包含替换/替换函数地址对的特殊__DATA
部分。来自dyld源的private dyld-interposing.h标头包含一个方便的宏来帮助解决这个问题,以及示例用法。