iOS為了節(jié)省空間,將系統(tǒng)框架以動(dòng)態(tài)庫(kù)的形式,保存在dyld中,這樣每個(gè)app都能使用這些庫(kù).也不需要每個(gè)app中都包含這些庫(kù).只需要在使用時(shí)調(diào)用就行.這個(gè)手機(jī)中就保存了一份.大大節(jié)省了內(nèi)存.
系統(tǒng)動(dòng)態(tài)庫(kù)的位置
那系統(tǒng)動(dòng)態(tài)庫(kù)的存放位置在哪呢?
需要越獄后得手機(jī)能看到.
存放地址:/System/Library/Caches/com.apple.dyld/
通過(guò)funbox可以看到兩個(gè)動(dòng)態(tài)庫(kù)dyld_shared_cache_arm64和dyld_shared_cache_armv7s
手機(jī)中動(dòng)態(tài)庫(kù)
動(dòng)態(tài)加載器dyld下載地址
蘋果官方源碼地址:dyld下載
一般來(lái)說(shuō)文件名數(shù)組越大,文件最大的就是最新的代碼.
下載源碼
修改源碼
1.可以使用dyld源碼中的launch-cache/dsc_extractor.cpp.將#if 0前面的代碼刪除(包括#if 0)踱葛,把最后面的#endif也刪掉.
修改后的源碼
2.執(zhí)行命令生成dsc_extractor
$ clang++ -o dsc_extractor dsc_extractor.cpp
執(zhí)行后生成一個(gè)可執(zhí)行文件
3.用生成的可執(zhí)行文件分離系統(tǒng)庫(kù)
$ ./dsc_extractor 動(dòng)態(tài)庫(kù)共享緩存文件的路徑 用于存放抽取結(jié)果的文件夾
正在抽取動(dòng)態(tài)庫(kù)
抽取后動(dòng)態(tài)庫(kù)包含兩個(gè)文件夾:System和usr
UIKit
可以用Hopper或者machoView查看系統(tǒng)的mach-o文件.
UIDevice currentDevice偽代碼