2012-05-31 15 views
7

iOS'ta çerçeveler hakkında kafam karıştı. Temelde dinamik bir kütüphane, üstbilgiler ve kaynaklar içeren bir dizin olduklarını düşünüyorum.Dosya sistemindeki iOS çerçeveler ikili dosyaları nerede bulunuyor?

Ancak, cihazımda Sistem/Kitaplık/Çerçeveler'deki çerçeve dizinleri dinamik kitaplığı içermiyor. Bu nasıl mümkün olabilir? Başvurulması gereken uygulama başlatıldığında hafızada yüklü olması gerekmiyor mu?

cevap

13

İkili aygıtlar artık aygıtta yok (ve iOS 3.1'den beri bulunmuyor): Apple, uygulamaların biraz daha verimli çalışması için hepsini büyük bir mmap() 'ed önbellek dosyasına birleştirdi. Sayfalar genellikle hiçbir zaman değişmediğinden, çekirdek her çalışan görüntü arasında etkili bir şekilde paylaşabilir. Önbellekte tutulan dosyalarda dlopen()'u, önbellekte belirtilen kütüphane olduğunda dyld kısa devre dosya araması olarak kullanabilirsiniz.

Önbellek dosyası /System/Library/Caches/com.apple.dyld numaralı belgede yer alır ve mimariden sonra adlandırılır (armv6 veya armv7). in this repository mevcuttur, ancak bir kez onlar aslında düzgün belleğe yüklenir edilemez çıkarılan dahilinde dsc_extractor veya KennyTM en dyld_decache kullanılarak elde edilebilir kütüphaneler, (hepsi etkin bir şekilde sembol tabloları önbellekte birleşti olsun.)

biraz var (daha eski ve daha az bilgili, daha derinlemesine olsa da) daha iyi bir yazının buraya yazılması: http://blog.howett.net/2009/09/cache-or-check/.

2

Ben de bunu farkettim. Garip. Ben "nerede olduklarını" Size açıklayamam, ama örneğin gözlemledim: Ben (özel) çerçeve dizini dışarı listelerseniz

:

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 

Bir BluetoothManager.framework/BluetoothManager görmüyorum dylib dosyası. Ancak bu kod aslında bu dosya varsa, dinamik olarak, yani çerçeveyi açmak için çalışır:

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

kök dosya sisteminden find komutunu kullanarak ("/") konumu da adlandırılan cihazda hiçbir dosyayı bulur BluetoothManager.

Muhtemelen aradığınız cevap bu değil, biliyorum neden bilmek istediğiniz, belki yardımcı olur?

+0

iPhone4'te bir ls komutunu nasıl yürüttünüz, telefon jailbreak oldu mu? – gabbler

+0

@gabbler, evet, bu ssh erişim etkin bir iPhone 4, jailbroken oldu. – Nate