smali框架源碼主要是對(duì)于baksmali的一個(gè)逆向過(guò)程,也就是其編譯過(guò)程。本身包的文件很少,也就是13個(gè)java文件
創(chuàng)新互聯(lián)專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、廣信網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站定制開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為廣信等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。但是里面有幾個(gè)有antlr3 和 jflex生成的詞法分析器和解釋器文件
smaliParser.java
smaliTreeWalker.java
這兩個(gè)文件時(shí)由 antlr3 生成的
smaliFlexLexer.java
這個(gè)文件是由 jflex生成的
對(duì)于這兩部分的生成,以及這兩個(gè)工具的使用,筆者未做深入研究。而smali本身最核心的地方就是利用這幾個(gè)詞法分析器 來(lái)生成不同的label,instruction,field,method,class等對(duì)象,最后組裝成dex文件,這幾個(gè)語(yǔ)義解析的文件主要還是為smali提供彈藥,而真正組裝成最后我們看到的dex文件,其實(shí)是dexlib2做的事情。
下一步我們需要好好看看dexlib2的源碼框架。
其實(shí)前面描述了那么多,不管是baksmali還是smali工具,多是涉及到一些對(duì)于dex文件的外圍io操作,而真正解析dex,解析dex各種指令,各種索引的操作是放在dexlib2這個(gè)目錄下面的,下面就讓我們走進(jìn)dexlib2這個(gè)目錄,好好分析一下這個(gè)庫(kù)是如何解析android dex文件的吧。
還是老規(guī)矩,先介紹源碼的目錄結(jié)構(gòu)已經(jīng)關(guān)鍵代碼文件的作用,給大家有個(gè)整體上的認(rèn)識(shí)再逐步細(xì)化。見(jiàn)下圖 dexlib2代碼目錄

這個(gè)是dexlib2的目錄,明顯看出來(lái)比baksmali和smali代碼量要多很多,這里先將核心目錄給大家做一下介紹
analysis 這個(gè)暫時(shí)不知道具體作用
base 這個(gè)文件夾下面全部都是抽象類,主要是對(duì)于一些dex文件的一些基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的一些表示
這里面重點(diǎn)要注意的是這個(gè)目錄下面的 reference這個(gè)文件夾,里面分別有 field索引,
method索引,string索引,以及type索引,這些都是跟dex文件本身組織結(jié)構(gòu)息息相關(guān)的,
這里如果不是太清楚的話,建議看一下dex文件的文件組織結(jié)構(gòu)。里面有表示string type
proto class的這些段的。
value 目錄下面的這些類都是跟類成員變量初始值相關(guān)的操作,比如 在某個(gè)類中的成員變量
String m_s = "hello world" 這個(gè)時(shí)候就要用到 BaseStringEncodedValue 這個(gè)類的操作
了
base 主目錄下的這幾個(gè)文件,
BaseAnnotation.java BaseAnnotationElement.java 跟注釋相關(guān)
BaseExceptionHandler.java try catch后的exceptionhandler相關(guān)
BaseMethodParameter.java 函數(shù)參數(shù)相關(guān)
BaseTryBlock try catch塊相關(guān)
builder 這個(gè)是為生成dex文件的一些組件文件,
build/debug 下面是對(duì)于 dex文件中debug信息保存的類,為最后生成dex做準(zhǔn)備
build/instruction 對(duì)于dalvik虛擬機(jī)支持的所有指令的支持的類,格式很鮮明,基本上
每種類型的dalvik虛擬機(jī)指令用一個(gè)類來(lái)表示
build/ 這下面就放了一些對(duì)于debug信息,異常句柄,指令,swith case塊,
trycatch 塊,函數(shù)builder的一些實(shí)現(xiàn)
總之這個(gè)文件夾下是支撐將smali文件寫(xiě)回為dex文件的類庫(kù)
dexbacked 這個(gè)目錄其實(shí)是將輸入的dex進(jìn)行解析后接受的類庫(kù)
dexbacked/instruction 解析后的dex的所有指令存放的類,也是以某類指令建立類來(lái)接收的
dexbacked/raw
對(duì)于dex文件結(jié)構(gòu)的各個(gè)組件接收的類。比如typeid,stringid,classdef,protoid,mapitem,headeritem,這些對(duì)比dex文件的結(jié)構(gòu)就能和這些類一一對(duì)應(yīng)起來(lái)
dexbacked/reference dex文件中的成員變量索引,方法索引,字符串索引,類型索引的類
dexbacked/util 一些小的工具的類集合
dexbacked/value 還是跟初始值相關(guān)的類
dexbacked 一些更加上層抽象的類,表示的信息量更多,比如DexBackedClassDef.java
就表示一個(gè)類,但是這個(gè)類又是由n個(gè)成員變量,n個(gè)方法來(lái)表示的,對(duì)于
成員變量又涉及到了初始值,權(quán)限,訪問(wèn)屬性,本身定義等,
對(duì)于成員方法就更復(fù)雜了,除了指令還有try catch信息 debug信息,注釋信息等等
總之, dexbacked這個(gè)類庫(kù),有java語(yǔ)言完整表達(dá)了整個(gè)dex文件的文件結(jié)構(gòu),細(xì)化到dex文件的每個(gè)細(xì)節(jié),就是說(shuō)這個(gè)文件夾下的類已經(jīng)能夠涵蓋dex文件所有的東西,里面的每個(gè)類,每個(gè)方法,每條指令都能從這個(gè)文件夾下找到相應(yīng)的類來(lái)表示。
iface 這個(gè)就是一個(gè)接口定義類,前面提到的base抽象類都是繼承與這個(gè)文件夾下面的類,主要是為了 利用java多態(tài)的特點(diǎn),減少代碼的編寫(xiě)量,讓代碼看起來(lái)更加專業(yè)。
immutable
這個(gè)文件夾提供了為類,方法,成員變量,指令,各種索引的不可更改的常量定義,但是這些類本身是可以new出來(lái)的,當(dāng)你要為dex文件添加類,方法,成員變量或者指令的 時(shí)候,這個(gè)文件夾下面的類就很有作用了,可以用這個(gè)文件夾下面的類輕松構(gòu)造出來(lái)各種索引,達(dá)到更改dex文件的目的,一般要配合builder下的各種方法來(lái)使用
rewriter 這個(gè)文件夾下面提供了對(duì)于寫(xiě)回dex文件各種函數(shù)的hook,包括寫(xiě)回類的hook,
寫(xiě)回方法的hook,甚至到寫(xiě)回每條指令的hook,這個(gè)文件夾其實(shí)起到的作用也是為了能夠
通過(guò)hook方便的修改dex文件。
writer 寫(xiě)回dex文件啟動(dòng)的文件夾,前面的builder這些都是為其提供彈藥的,這里整體的dex文件的生成
,所有組織都是通過(guò)這個(gè)文件夾下面的不同的類協(xié)同完成的。
. 直接根目錄下的是更基礎(chǔ)的訪問(wèn)權(quán)限,指令格式,操作格式,索引,值類型的一些基礎(chǔ)類了
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前標(biāo)題:baksmali和smali源碼分析(六)-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.chinadenli.net/article24/cccgce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、定制開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站策劃、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容