我想编写自己的用于调试的 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 插入。这包括在包含替换/替换函数地址对的动态库的 __interpose
段中生成一个特殊的 __DATA
部分。来自 dyld 源的 private dyld-interposing.h header 包含一个方便的宏来帮助解决这个问题,以及一个示例用法。
关于macos - libgmalloc 如何使用两级命名空间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20387225/