2012-04-07 19 views
10

Po pewnym starannego debugowania odkryłem błąd w mojej aplikacji, która jest zakorzeniona w ramach systemu załadunku wózkiem firmy Apple zestawie:Czy aplikacja Mac OS X może uniemożliwić dlopen ładowanie biblioteki?

/System/Library/CoreServices/MLTEFile.bundle 

Jestem przekonany, że ja nie korzystają z usług tego pakietu, i mam wątpliwości, że jest wiele aplikacji. W rzeczywistości nauczyłem się, studiując Xcode, że pakiet NIE MOŻE być załadowany do przestrzeni pamięci Xcode, ponieważ pakiet nie jest zgodny z Garbage Collection.

Idealnie, chciałbym również zapobiec ładowaniu tego pakietu do mojej aplikacji. Jednym ze sposobów robienia tego byłoby wymaganie GC w mojej własnej aplikacji, ale nie zamierzam tego robić. Czy ktokolwiek może wymyślić sposób obejścia prób przez system frameworks do wywołania dlopen() w tej bibliotece?

+0

Wyobrażam sobie, że inżynierowie Apple chcieliby wiedzieć, jakie problemy z tym masz. Brzmi * super * - dziwnie. Opublikuj link do (Otwórz) Radar, gdy masz szansę złożyć błąd! – cbowns

Odpowiedz

6

Dzięki wielu przydatnym odpowiedziom na Twitterze, mogę zaoferować tutaj opcję "interpose" dla dyld jako potencjalnego rozwiązania. Szukaj "wstawienie funkcji w biblioteki zależne":

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

Krótki przykład tutaj:

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

I uproszczona makro do deklarowania stawający tutaj:

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

Jestem nieco zdezorientowany różnymi podejściami s zademonstrowane tutaj. Wydaje się, że istnieje mechanizm służący do anonsowania pożądanego pożądania w tabeli nazw DYLD i całkowicie (?) Innego mechanizmu, który polega na używaniu dlsym (RTLD_NEXT, ...) do łączenia się z oryginałem. W pobieranym przez Apple przykładzie (z pierwszego linku do dokumentacji) używają techniki dlsym, ale nie jest dla mnie jasne, czy to pośrednio powoduje wstawienie.

Powiązane problemy