2012-04-07 127 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技術,但我不清楚這是否隱含導致插入發生。

相關問題