libgmalloc如何使用两级名称空间



我想编写自己的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头包含一个方便的宏来帮助实现这一点,并提供了一个示例用法。

相关内容

  • 没有找到相关文章

最新更新