2012-04-07 18 views
10

Sau khi một số lỗi cẩn thận, tôi đã phát hiện ra một lỗi trong ứng dụng của tôi được bắt rễ trong khuôn khổ hệ thống tải một lỗi của Apple bó:Ứng dụng Mac OS X có thể ngăn dlopen tải thư viện không?

/System/Library/CoreServices/MLTEFile.bundle 

tôi tin tưởng rằng tôi không được hưởng lợi từ các dịch vụ của gói này, và tôi nghi ngờ rằng có rất nhiều ứng dụng. Trong thực tế, tôi đã học được bằng cách nghiên cứu chính Xcode rằng gói KHÔNG THỂ được nạp vào không gian bộ nhớ của Xcode bởi vì gói không tương thích với Garbage Collection.

Vì vậy, lý tưởng, tôi cũng muốn ngăn chặn việc tải gói này vào ứng dụng của mình. Một cách để làm điều đó là yêu cầu GC trong ứng dụng của riêng tôi, nhưng tôi không định làm điều đó. Ai có thể nghĩ ra một cách để phá vỡ các nỗ lực của các khung hệ thống để gọi dlopen() trên thư viện này?

+0

Tôi tưởng tượng các kỹ sư của Apple muốn biết bạn đang gặp phải vấn đề gì với vấn đề này. Âm thanh * siêu * -chúng tôi. Đăng liên kết tới (Mở) Radar khi bạn có cơ hội để phát hiện lỗi! – cbowns

Trả lời

6

Nhờ có một số câu trả lời hữu ích trên Twitter, tôi có thể cung cấp tính năng "xen kẽ" của dyld làm giải pháp tiềm năng tại đây. Tìm kiếm cho "Chức năng xen trong thư viện phụ thuộc":

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

dụ ngắn ở đây:

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

Và một macro đơn giản cho tuyên bố interposes đây:

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

Tôi hơi bối rối bởi sự tán tỉnh khác nhau s đã chứng minh ở đây. Dường như có một cơ chế để quảng cáo mong muốn _interpose trong bảng tên DYLD, và một cơ chế hoàn toàn (?) Khác nhau dựa vào việc sử dụng dlsym (RTLD_NEXT,…) để chuỗi qua bản gốc. Trong ví dụ có thể tải xuống của Apple (từ liên kết tài liệu đầu tiên), họ sử dụng kỹ thuật dlsym, nhưng nó không rõ ràng với tôi nếu điều này ngầm gây ra sự xen kẽ xảy ra.