baksmali和smali源碼分析(三)-創(chuàng)新互聯(lián)

baksmali 的源碼分析

在baksmali進行源碼分析之前,需要讀者掌握一條主線,因為本身筆者只是由于項目需要用到這套源碼,在工作之余的時間里面來進行學習也沒有時間和精力熟讀源碼的每個文件每個方法,但是依據(jù)這條主線,至少能夠猜出并且猜對baksmali里面的源碼的文件大概的作用是什么,這樣在修改問題和移植的時候才能做到游刃有余。

創(chuàng)新互聯(lián)專注于臨西企業(yè)網(wǎng)站建設,響應式網(wǎng)站建設,成都做商城網(wǎng)站。臨西網(wǎng)站建設公司,為臨西等地區(qū)提供建站服務。全流程按需定制開發(fā),專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

這條主線是,baksmali其實只是利用了dexlib2提供的接口,將dex文件讀入到一塊內(nèi)存中,這塊內(nèi)存或者說數(shù)據(jù)結(jié)構開辟的大小是跟輸入的dex文件相關的,而這塊內(nèi)存所映射的數(shù)據(jù)結(jié)構是一個列表形式的數(shù)組,以類為單位,將dex文件全部解析出來,可以簡單理解為比如這個dex文件中有100個類,這個數(shù)組就有100個對象,每個對象數(shù)據(jù)結(jié)構相同,但大小,內(nèi)容各異。

baksmali通過 dexlib2提供的接口獲取到這個對象中以后,自己定義了一種文件組織規(guī)則,當然這種組織規(guī)則也絕非無中生有,而是在指令方面遵循 google的dalvik 指令規(guī)范,在文件組織方面遵循了 java jar包對于各個class的組織規(guī)范,自己在寄存器和函數(shù)組織方面有些自己的規(guī)則.

而這套規(guī)則也將來要跟smali這個生成dex文件的工具一一對應。通過這樣的一種規(guī)則,baksmali 將獲取的對象生成了一個一個的smali文件,讓冰冷的二進制的dex文件變得栩栩如生,方便大家的閱讀。

以這條主線,我們來看一下baksmali源碼的文件組織結(jié)構

baksmali源碼有50多個文件,分別是由圖4 圖5 圖6 三副圖表示

baksmali和smali源碼分析(三)

                                                              圖4

其中圖4 下面直接的四個文件

baksmali.java
通過main函數(shù)得到dex文件的內(nèi)存布局,將其生成smali文件

baksmaliOptions.java
生成smali文件的一些選項配置文件

dump.java
類似與dexdump這個工具的作用,是在控制臺輸出dex文件中的各個段的信息的函數(shù),
本身和baksmali源碼無關

main.java
主程序入口文件,主要檢測參數(shù),通過調(diào)用
//Read in and parse the dex file
DexBackedDexFile dexFile = DexFileFactory.loadDexFile(dexFileFile, options.apiLevel);
將dex映射到內(nèi)存中去,然后再調(diào)用
baksmali.disassembleDexFile(dexFile, options);
這個函數(shù)來生成smali文件

                    baksmali和smali源碼分析(三)

                                                        圖5

圖5 中文件眾多

為了能夠比較好的理解這些文件的作用,這里需要補充一點smali文件生成的規(guī)則,smali文件的生成其實
只有三種定義,對于一個smali文件而言只有類,成員變量,和方法,對應與文件來說就是

ClassDefinition.java
FieldDefinition.java
MethodDefinition.java

不管再復雜的類,baksmali源碼也認為一個類中只有這三種基本元素,當然生成一個類的時候是需要從

ClassDefinition.java 文件中的writeTo寫起的,而在這過程中肯定有成員變量,而寫成員變量的時候
就需要從 FieldDefinition.java文件中的 writeTo 寫起

當寫成員函數(shù)的時候就需要從 MethodDefinition.java 文件中的 writeTo 寫起了

在理解了上面概念后,我用思維導圖畫了一下這個文件夾下的文件的組織形式,以供讀者整體理解
如圖7

baksmali和smali源碼分析(三)

                                                                圖7

看完圖5的文件夾了,再看圖6中的文件,就很好理解了

baksmali和smali源碼分析(三)

                                                          圖6

這個文件夾下的文件主要是實現(xiàn)生成smali文件的時候的一些基本數(shù)據(jù)類型的寫入,比如

boolean類型的true和false

char 類型的寫入等等

ok 理解完了整個源碼的目錄組織,以及大部分文件的作用,現(xiàn)在我們可以進入baksmali源碼,開始進行分析了

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:baksmali和smali源碼分析(三)-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article14/dhiege.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)頁設計公司、小程序開發(fā)做網(wǎng)站、品牌網(wǎng)站設計、自適應網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設