我想编写自己的用于调试的 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/

10-16 06:59