How libgmalloc work with two level namespaces?

时光毁灭记忆、已成空白 提交于 2019-11-29 14:20:47

问题


I want to write my own malloc/free functions with debug purposes, documentation says I have to use DYLD_FORCE_FLAT_NAMESPACE together with DYLD_INSERT_LIBRARIES. But at the same time libgmalloc article clearly states:

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.

The question is: how to remove the necessity in DYLD_FORCE_FLAT_NAMESPACE ? malloc from my own library is not used if I don't force the namespace flatness.


回答1:


You need to use dyld interposing. This consists of generating a special __interpose section in the __DATA segment of your dynamic library containing pairs of replacement / replaced function addresses. The private dyld-interposing.h header from the dyld source contains a handy macro to help with this, along with an example usage.



来源:https://stackoverflow.com/questions/20387225/how-libgmalloc-work-with-two-level-namespaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!