Macos Mac OS X应用程序能否阻止dlopen加载库?

Macos Mac OS X应用程序能否阻止dlopen加载库?,macos,cocoa,dlopen,dyld,Macos,Cocoa,Dlopen,Dyld,经过仔细调试后,我发现我的应用程序中存在一个bug,其根源是加载有bug的Apple捆绑包的系统框架: /System/Library/CoreServices/MLTEFile.bundle 我相信我并没有从这个捆绑包的服务中受益,我怀疑很多应用程序是否受益。事实上,通过研究Xcode本身,我了解到捆绑包无法加载到Xcode的内存空间中,因为捆绑包与垃圾收集不兼容 因此,理想情况下,我希望阻止这个捆绑包也被加载到我的应用程序中。一种方法是在我自己的应用程序中要求GC,但我不打算这样做。有人能

经过仔细调试后,我发现我的应用程序中存在一个bug,其根源是加载有bug的Apple捆绑包的系统框架:

/System/Library/CoreServices/MLTEFile.bundle
我相信我并没有从这个捆绑包的服务中受益,我怀疑很多应用程序是否受益。事实上,通过研究Xcode本身,我了解到捆绑包无法加载到Xcode的内存空间中,因为捆绑包与垃圾收集不兼容


因此,理想情况下,我希望阻止这个捆绑包也被加载到我的应用程序中。一种方法是在我自己的应用程序中要求GC,但我不打算这样做。有人能想出一种方法来绕过系统框架在这个库中调用
dlopen()
的尝试吗?

多亏了Twitter上的许多有用的回复,我能够在这里提供dyld的“插入”功能作为一个潜在的解决方案。搜索“在依赖库中插入函数”:

这里有一个简短的例子:

以及一个用于在此处声明插入的简化宏:


我对这里演示的各种方法感到有点困惑。似乎有一种机制可以在DYLD name表中宣传插入欲望,还有一种完全不同的机制依赖于使用dlsym(RTLD_NEXT,…)链接到原始的。在苹果的可下载示例(从第一个文档链接)中,他们使用了dlsym技术,但我不清楚这是否会导致插入发生。

我想苹果工程师会想知道您在这方面遇到了什么问题。听起来很奇怪。当你有机会提交一个bug时,发布一个到(开放)雷达的链接!