2012-04-07 17 views
10

Después de una cierta depuración cuidado, he descubierto un error en mi aplicación que tiene sus raíces en los marcos del sistema de carga de un cochecito de Apple paquete:¿Puede una aplicación Mac OS X evitar que dlopen cargue una biblioteca?

/System/Library/CoreServices/MLTEFile.bundle 

Estoy seguro de que no estoy beneficiando de los servicios de este paquete, y dudo que haya muchas aplicaciones. De hecho, aprendí al estudiar Xcode que el paquete NO PUEDE cargarse en el espacio de memoria de Xcode porque el paquete no es compatible con Garbage Collection.

Así que, idealmente, me gustaría evitar que este paquete se cargue también en mi aplicación. Una forma de hacerlo sería solicitar GC en mi propia aplicación, pero no voy a hacer eso. ¿Alguien puede pensar en una forma de eludir los intentos de frameworks de sistemas para llamar al dlopen() en esta biblioteca?

+0

Imagino que a los ingenieros de Apple les gustaría saber qué problemas tiene con esto. Suena * super * -weird. Publica un enlace a (Abrir) Radar cuando tienes la oportunidad de presentar un error. – cbowns

Respuesta

6

Gracias a una serie de respuestas útiles en Twitter, puedo ofrecer la función "interponer" de dyld como una posible solución aquí. Buscar "Funciones interponiendo en bibliotecas dependientes":

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

ejemplo corto aquí:

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

Y una macro simplificado para declarar interpone aquí:

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

Estoy un poco confundido por las diversas aproximaciones s demostrado aquí. Parece que hay un mecanismo para anunciar el deseo de interponer en la tabla de nombres DYLD, y un mecanismo completamente diferente que se basa en el uso de dlsym (RTLD_NEXT, ...) para encadenarse al original. En el ejemplo descargable de Apple (del primer enlace de documentación), usan la técnica dlsym, pero no me queda claro si esto provoca implícitamente la interposición.

Cuestiones relacionadas