我想编写自己的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。
您需要使用dyld插入。这包括在动态库的__DATA
段中生成一个特殊的__interpose
部分,该部分包含替换/替换的函数地址对。来自dyld源的private dyld interposing.h头包含一个方便的宏来帮助实现这一点,并提供了一个示例用法。