2012-05-31 17 views
7

मैं आईओएस पर ढांचे के बारे में उलझन में हूं। मुझे लगता है कि वे मूल रूप से एक निर्देशिका है जिसमें एक गतिशील पुस्तकालय, शीर्षलेख और संसाधन शामिल हैं।फाइल सिस्टम में स्थित आईओएस ढांचे बाइनरी कहां हैं?

लेकिन मेरे डिवाइस में सिस्टम/लाइब्रेरी/फ्रेमवर्क में ढांचे निर्देशिकाओं में गतिशील लाइब्रेरी नहीं है। यह कैसे संभव है? क्या इसे स्मृति में लोड होने के लिए उपस्थित नहीं होना चाहिए जब इसे आवश्यक एप्लिकेशन लॉन्च किया जाता है?

उत्तर

13

द्विआधारी अब डिवाइस पर मौजूद नहीं हैं (और आईओएस 3.1 के बाद से नहीं हैं): ऐप्पल ने उन्हें एक और अधिक कुशल बनाने के लिए, एक बड़े mmap() 'एड कैश फ़ाइल में विलय कर दिया है। चूंकि पृष्ठ आमतौर पर कभी नहीं बदलते हैं, इसलिए कर्नेल प्रभावी रूप से उन्हें प्रत्येक चलती छवि के बीच साझा कर सकता है। कैश में रखी गई फाइलों पर आप अभी भी dlopen() का उपयोग कर सकते हैं, dyld शॉर्ट सर्किट फ़ाइल लुकअप जब दिए गए लाइब्रेरी कैश में मौजूद है।

कैश फ़ाइल /System/Library/Caches/com.apple.dyld में है, और इसका नाम आर्किटेक्चर (armv6 या armv7) के नाम पर रखा गया है। पुस्तकालयों के भीतर dsc_extractor या KennyTM के dyld_decache का उपयोग कर निकाला जा सकता है, उपलब्ध 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 आदेश का उपयोग करना ("/") स्थान भी नहीं फ़ाइल का नाम डिवाइस पर पाता है ब्लूटूथ प्रबंधक

मुझे पता है कि संभवतः वह उत्तर नहीं है जिसे आप ढूंढ रहे हैं, लेकिन पर निर्भर करता है कि क्यों आप जानना चाहते हैं, शायद यह मदद करता है?

+0

आपने आईफोन 4 पर एलएस कमांड कैसे निष्पादित किया, फोन जेलब्रोकन था? – gabbler

+0

@ गैबलर, हाँ, यह एक जेलब्रोकन आईफोन 4 था, एसएसएच एक्सेस सक्षम के साथ। – Nate

संबंधित मुद्दे