class dump使用方式和原理

各個版本xcode class dump的頭文件:https://github.com/nst/iOS-Runtime-Headers/releases

一、安裝

class dump下載地址http://stevenygard.com/download/class-dump-3.5.tar.gz

下載安裝包完成后,將class-dump復(fù)制到usr/bin文件夾下

如果這個時候沒有發(fā)現(xiàn)usr文件夾 說明其隱藏起來了 去查詢mac系統(tǒng)下怎么顯示隱藏文件

發(fā)現(xiàn)mac os 10.11不讓復(fù)制 沒有這個權(quán)限

解決辦法如下:

重啟電腦,按住 command + R,出現(xiàn) OS X Utilities 界面后,在 Utilities 菜單中選擇 Terminal ,運行 “csrutil disable; reboot” ,電腦自動重啟。(開啟 sip “csrutil enanbel;reboot”)

重新啟動后,usr/bin下可以復(fù)制進class-dump文件了

接下來 給class-dump賦權(quán)限

sudo chmod 777 /usr/bin/class-dump

然后要求輸入密碼

輸入class-dump 出現(xiàn)如下圖


則表示安裝成功了 在任何一個目錄里都可以正常使用class-dump了


二、使用

class-dump在dump從appstore上下載下來的app的時候,首先是需要對app進行砸殼處理的,具體的砸殼工具是dumpdecrypted、clutch等等。手頭現(xiàn)在沒有越獄手機,所以暫無法對appstore上的進行dump。

但可以對自己編寫的app進行dump,同時也可以dump私有框架的頭文件

1:對自己寫的app進行dump

進入終端 到桌面

class-dump -H test1.app -o testgod

將test1.app的可執(zhí)行文件 進行dump到桌面testgod文件夾里(不需要事先創(chuàng)建)

結(jié)果在testgod里發(fā)現(xiàn)

這個是dump之前的工程文件


這個是dump出來的工程文件


dump的很準(zhǔn)確

對比前后ViewController.h里的文件

這是原文件


這是dump后的文件


發(fā)現(xiàn)dump后的還多了幾個方法

對比一下:

cxx_destruct是析構(gòu)方法 在原ViewController里沒有顯示調(diào)用 自從使用了ARC模式之后

didReceiveMemoryWarning 在原ViewController里有實現(xiàn),但是在原ViewController的頭文件中沒有進行過聲明

buttonClick,viewDidLoad也分別在原ViewController里有實現(xiàn),但是在原ViewController的頭文件中沒有進行過聲明

這一點就充分說明class-dump的準(zhǔn)確性,這里我提出一個疑問,既然class-dump能如此精準(zhǔn)的提取頭文件,甚至能提出.m文件里有的.h文件里沒有聲明過的,為什么就不能連函數(shù)體一起提取出來呢?

在研究完Mach-O文件內(nèi)部揭秘中就可以回答這個問題

Mach的文件結(jié)構(gòu)里的data部分,就只有類的名稱和類的方法,class-dump自然是根據(jù)Mach的文件結(jié)構(gòu)來分析的。設(shè)想一下,如果有類的方法的實際,那么這個Mach可執(zhí)行文件得有多大。

所以class-dump只能提取函數(shù)的方法名。

2:對私有框架進行提出


查找資料 無果

仍然顯示:

This file does not contain any Objective-C runtime information.

采用swift編寫或是關(guān)鍵部分采用C語言編寫的模塊是無法dump出頭文件的

據(jù)說xcode7之后ios9之后,dylib變成tdb,所有的私有函數(shù)的dump就無法使用class-dump而只能使用runtime dump了。

關(guān)于dylib和tdb的一篇小文http://www.meniny.cn/2015/09/22/00-00-01-iOS_Xcode_7_tbd/

而關(guān)于class-dump的解析原理,以及本文中提及到的兩個問題 都和Mach-o文件解析格式有關(guān)。

具體的class-dump解析類名和方法名的具體過程 見:http://www.blogfshare.com/ioss-mach-o-dump.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容