2012-04-07 110 views
10

一些精心调试后,我发现,根植于制度框架加载马车苹果捆在我的应用程序中的错误:Mac OS X应用程序可否阻止dlopen加载库?

/System/Library/CoreServices/MLTEFile.bundle 

我深信,我不是从这个捆绑的服务中受益,并怀疑许多应用程序是。事实上,我通过研究Xcode本身了解到,捆绑包不能被加载到Xcode的内存空间中,因为捆绑包不是垃圾收集兼容的。

所以理想情况下,我想阻止将此捆绑包加载到我的应用中。解决这个问题的一种方法是在我自己的应用程序中需要GC,但我不打算这么做。任何人都可以想出一种方法来绕过系统框架试图在该库上调用dlopen()

+0

我想苹果工程师想知道你有什么问题。声音*超级* - 怪异。发布一个链接到(打开)雷达,当你有机会提交错误! – cbowns 2012-04-09 05:45:09

回答

6

由于Twitter上有许多有用的回复,我能够提供dyld的“干预”功能作为潜在的解决方案。搜索 “的依赖库插入函数”:

https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html#//apple_ref/doc/uid/TP40002182-SW10

短的例子在这里:

http://toves.freeshell.org/interpose/

而且这里宣布介于简化宏:

http://www.opensource.apple.com/source/dyld/dyld-97.1/include/mach-o/dyld-interposing.h

我对各种方法感到困惑在这里演示。似乎在DYLD名称表中有一个用于宣传_interpose愿望的机制,以及一个完全(?)不同的机制,它依靠使用dlsym(RTLD_NEXT,...)链接到原始表单。在Apple的可下载示例(从第一个文档链接)中,他们使用dlsym技术,但我不清楚这是否隐含导致插入发生。

相关问题