baksmali和smali源碼分析(二)

這一節,主要介紹一下 baksmali代碼的框架。


我們經常在反編譯android apk包的時候使用apktool這個工具,其實本身這個工具裏面對於dex文件解析和重新生成就是使用的baksmali 和smali這兩個jar包
其中 baksmali是將 dex文件轉換成便於閱讀的smali文件的,
具體使用命令如下:
java -jar baksmali.jar classes.dex -o myout
其中myout是輸出的文件夾

而smali是將smali文件重新生成回 dex文件的
具體使用的命令如下:
java -jar smali.jar myout -o classes.dex

這兩個工具在源碼中分別對應兩個文件夾,下面見圖三,源碼文件夾的樣子

wKiom1PshsGQq0EDAAKEMieqepk811.jpg


在分析源碼之前,這裏我先將這些文件夾下的主要作用來說明一下,讓大家有個總體的認識

baksmali     該文件夾下面主要實現的是將 dex轉換成smali文件的代碼,需要分析的重點

deodexerant  該文件夾下面的文件是一個可執行文件,筆者嘗試用ndk編譯了一下,能夠編譯出可執行文件根據裏面的描述,是爲了 拷貝出來dalvik虛擬機中的函數表,有興趣的同學可以試試,就是用dlopen 將 libdvm.so 打開,然後得到 dvmGetInlineOpsTable 這個導出表,看看裏面的內容

dexlib2      這個文件夾其實是dex和smali轉換真正起到作用的代碼,不管是baksmali還是smali都需要用到這個庫中的接口和方法,才能解析和生成相應的smali文件,這個在後面會重點分析的

examples     一些有代表意義的smali文件

externaljar  這個是我爲第三方jar建立的一個目錄

gradle       管理工具,沒有特別關注,跟源碼分析無關

scripts      執行smali和baksmali的腳步文件,跟源碼無關

smali        該文件夾下面主要實現的是將 smali文件轉換成dex文件的代碼,需要重點分析

smali-integration-tests   整合測試的一個文件夾,裏面也是一些smali文件,跟源碼無關

util         一些能夠提取出來的輔助類的實現





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章