在iOS開發(fā)中骡显,為了提升系統(tǒng)的安全性疆栏,很多系統(tǒng)庫文件都被打包到一個緩存的文件當中即dyld緩存,那大家對dyld緩存了解多少呢惫谤?今天小編將和大家分享的就是一位iOS大神對dyld緩存的使用分析壁顶,一起來看看吧。
? ? ? ?首先溜歪,我們來了解下dyld緩存若专。在iOS系統(tǒng)中,幾乎所有的程序都會用到動態(tài)庫蝴猪,而動態(tài)庫在加載的時候都需要用dyld(位于/usr/lib/dyld)程序進行鏈接调衰。很多系統(tǒng)庫幾乎都是每個程序都要用到的,與其在每個程序運行的時候一個一個將這些動態(tài)庫都加載進來自阱,還不如先把它們打包好嚎莉,一次加載進來來的快。
? ? ? dyld緩存在系統(tǒng)中位于“/System/Library/Caches/com.apple.dyld/”目錄下沛豌,文件名是以“dyld_shared_cache_”開頭趋箩,再加上這個dyld緩存文件所支持的指令集。在這個目錄下加派,有可能有多個dyld緩存文件叫确,對應所支持的不同指令集。比如芍锦,在iPad Air 2上竹勉,該目錄下就存在兩個緩存文件:
因為iPad Air 2是64位的ARM(ARM v8)處理器,同時它也兼容32位的ARM應用娄琉,所以就要有兩個緩存文件次乓。dyld_shared_cache_arm64對應64位的版本,而dyld_shared_cache_armv7s對應32位的版本孽水。到目前為止檬输,所有iOS支持的ARM指令集有以下四種:
1)armv6
2)armv7
3)armv7s
4)arm64
沒有了系統(tǒng)庫的原始二進制版本是不是就沒法分析了呢?當然不是匈棘,我們還可以從dyld緩存文件中將系統(tǒng)庫的原始二進制文件給解出來丧慈。目前,有兩個工具可以做到這點,一是dyld_decache逃默,還有一個就是jtool鹃愤。
使用dyld_decache可以整體提取dyld緩存文件中的所有庫原始二進制文件:
dyld_decache [-o folder] [-f name [-f name] ...] path/to/dyld_shared_cache_armvX
-o用來指定提取出來的文件所要保存的路徑,如果不指定完域,默認就在當前目錄下創(chuàng)建一個叫做“l(fā)ibrary”的目錄保存软吐。-f用來說明要提取庫的名字,如果要提取的庫不止一個吟税,那么每個庫的名字前面都要帶上-f凹耙。如果不指定默認行為就是把緩存文件中所有的庫文件全部都提取出來。例如肠仪,如果想要解壓Security庫肖抱,可以使用下面的命令:
dyld_decache -o ./Security -f Security ./dyld_shared_cache_armv7s
前面也提到了,還可以用jtool來達到提取指定庫文件的目的:
jtool -extract name path/to/dyld_shared_cache_armvx
-extract用來指定要提取庫的名字异旧。jtool默認不支持提取全部緩存中庫文件的功能意述,只能一個一個提取。
以上就是iOS中dyld緩存的相關使用方法吮蛹,大家可以在系統(tǒng)中去找找對應的緩存文件荤崇,結合本文的分享,深入研究下潮针。