2012-05-31 3 views
7

Я немного растерялся о фреймворках на iOS. Я думаю, что они в основном представляют собой каталог, содержащий динамическую библиотеку, заголовки и ресурсы.Где находятся двоичные файлы фреймворка iOS, расположенные в файловой системе?

Но в моем устройстве каталоги фреймворков в System/Library/Frameworks не содержат динамическую библиотеку. Как это возможно? Не должно ли оно быть загружено в память при запуске приложения, требующего его?

ответ

13

Бинарные файлы больше не существуют на устройстве (и с тех пор, как iOS 3.1): Apple объединила их в один большой файл кеша mmap(), чтобы сделать запуск приложения более эффективным. Поскольку страницы обычно не изменяются, ядро ​​может эффективно делиться ими между каждым запущенным изображением. Вы по-прежнему можете использовать dlopen() для файлов, хранящихся в кеше, так как dyld поиск коротких замыканий, когда данная библиотека существует в кеше.

Файл кеша находится в /System/Library/Caches/com.apple.dyld и назван в честь архитектуры (armv6 или armv7). Библиотеки в может быть извлечено с помощью dsc_extractor или dyld_decache KennyTM в, доступные in this repository, но как только извлекаемые они не могут фактически быть загружены в память должным образом (так как все они эффективно получить свои таблицы символов объединены в кэше.)

Там немного о лучшей (хотя более старой и менее информированной, более углубленной) записи здесь: http://blog.howett.net/2009/09/cache-or-check/.

2

Я тоже это заметил. Странный. Я не могу объяснить вам «где они», но я наблюдал, например:

Если я перечислить на (частный) рамочное каталог:

iPhone4:/System/Library/PrivateFrameworks/BluetoothManager.framework root# ls -alt 
total 8 
lrwxr-xr-x 1 root wheel 28 Nov 4 2011 CodeResources -> _CodeSignature/CodeResources 
drwxr-xr-x 3 root wheel 170 Nov 2 2011 ./ 
drwxr-xr-x 2 root wheel 102 Nov 2 2011 _CodeSignature/ 
-rw-r--r-- 1 root wheel 740 Nov 2 2011 Info.plist 
drwxr-xr-x 170 root wheel 5814 Dec 31 2007 ../ 

iPhone4:/System/Library/PrivateFrameworks/BluetoothManager.framework root# ls -alt _CodeSignature/ 
total 0 
drwxr-xr-x 3 root wheel 170 Nov 2 2011 ../ 
drwxr-xr-x 2 root wheel 102 Nov 2 2011 ./ 
-rw-r--r-- 1 root wheel 1222 Nov 2 2011 CodeResources 

Вы не видите BluetoothManager.framework/BluetoothManager файл dylib. Однако, этот код на самом деле работает динамически открывать эти рамки, как если бы этот файл существует:

handle = dlopen("/System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager", RTLD_LAZY); 

Использование команды find от корневой файловой системы («/») расположение также не находит файл на устройстве с именем BluetoothManager.

Я знаю, что это, вероятно, не тот ответ, который вы ищете, но в зависимости от почему вы хотите знать, может быть, это помогает?

+0

Как вы выполнили команду ls на iPhone4, был ли телефон взломан? – gabbler

+0

@gabbler, да, это был взломанный iPhone 4, с включенным доступом ssh. – Nate

Смежные вопросы