2012-04-07 9 views
10

Dopo un po 'attenta debug, ho scoperto un bug nella mia richiesta, che affonda le sue radici nei quadri sistema di caricamento di un buggy di Apple bundle:Un'applicazione Mac OS X può impedire a dlopen di caricare una libreria?

/System/Library/CoreServices/MLTEFile.bundle 

Sono sicuro che io non sono che beneficiano dei servizi di questo bundle, e dubito che ci siano molte app. In effetti ho imparato studiando Xcode stesso che il pacchetto NON può essere caricato nello spazio di memoria di Xcode perché il pacchetto non è compatibile con Garbage Collection.

Quindi, idealmente, mi piacerebbe evitare che questo pacchetto venga caricato nella mia app. Un modo per farlo sarebbe quello di richiedere GC nella mia app, ma non ho intenzione di farlo. Qualcuno può pensare a un modo per aggirare i tentativi dei framework di sistema di chiamare dlopen() su questa libreria?

+0

Immagino che gli ingegneri Apple vorrebbero sapere quali problemi si stanno avendo con questo. Suoni * super * - strani. Pubblica un link al Radar (Open) quando hai la possibilità di presentare un bug! – cbowns

risposta

6

Grazie a una serie di risposte utili su Twitter, sono in grado di offrire qui la funzionalità "interposizione" di dyld. Cerca "Funzioni interposti in librerie dipendenti":

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

breve esempio qui:

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

E una macro semplificata per dichiarare interpone qui:

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

Sono un po 'confuso dai vari approache s dimostrato qui. Sembra che ci sia un meccanismo per pubblicizzare il desiderio _interpose nella tabella dei nomi DYLD e un meccanismo completamente diverso (?) Che si basa sull'uso di dlsym (RTLD_NEXT, ...) per fare un collegamento con l'originale. Nell'esempio scaricabile di Apple (dal primo link alla documentazione), usano la tecnica dlsym, ma non mi è chiaro se ciò implichi implicitamente l'interposizione.

Problemi correlati