smali框架源碼主要是對于baksmali的一個逆向過程,也就是其編譯過程。本身包的文件很少,也就是13個java文件
創新互聯專注于企業成都營銷網站建設、網站重做改版、廣信網站定制設計、自適應品牌網站建設、H5高端網站建設、商城網站定制開發、集團公司官網建設、外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為廣信等各大城市提供網站開發制作服務。但是里面有幾個有antlr3 和 jflex生成的詞法分析器和解釋器文件
smaliParser.java
smaliTreeWalker.java
這兩個文件時由 antlr3 生成的
smaliFlexLexer.java
這個文件是由 jflex生成的
對于這兩部分的生成,以及這兩個工具的使用,筆者未做深入研究。而smali本身最核心的地方就是利用這幾個詞法分析器 來生成不同的label,instruction,field,method,class等對象,最后組裝成dex文件,這幾個語義解析的文件主要還是為smali提供彈藥,而真正組裝成最后我們看到的dex文件,其實是dexlib2做的事情。
下一步我們需要好好看看dexlib2的源碼框架。
其實前面描述了那么多,不管是baksmali還是smali工具,多是涉及到一些對于dex文件的外圍io操作,而真正解析dex,解析dex各種指令,各種索引的操作是放在dexlib2這個目錄下面的,下面就讓我們走進dexlib2這個目錄,好好分析一下這個庫是如何解析android dex文件的吧。
還是老規矩,先介紹源碼的目錄結構已經關鍵代碼文件的作用,給大家有個整體上的認識再逐步細化。見下圖 dexlib2代碼目錄
這個是dexlib2的目錄,明顯看出來比baksmali和smali代碼量要多很多,這里先將核心目錄給大家做一下介紹
analysis 這個暫時不知道具體作用
base 這個文件夾下面全部都是抽象類,主要是對于一些dex文件的一些基礎數據結構的一些表示
這里面重點要注意的是這個目錄下面的 reference這個文件夾,里面分別有 field索引,
method索引,string索引,以及type索引,這些都是跟dex文件本身組織結構息息相關的,
這里如果不是太清楚的話,建議看一下dex文件的文件組織結構。里面有表示string type
proto class的這些段的。
value 目錄下面的這些類都是跟類成員變量初始值相關的操作,比如 在某個類中的成員變量
String m_s = "hello world" 這個時候就要用到 BaseStringEncodedValue 這個類的操作
了
base 主目錄下的這幾個文件,
BaseAnnotation.java BaseAnnotationElement.java 跟注釋相關
BaseExceptionHandler.java try catch后的exceptionhandler相關
BaseMethodParameter.java 函數參數相關
BaseTryBlock try catch塊相關
builder 這個是為生成dex文件的一些組件文件,
build/debug 下面是對于 dex文件中debug信息保存的類,為最后生成dex做準備
build/instruction 對于dalvik虛擬機支持的所有指令的支持的類,格式很鮮明,基本上
每種類型的dalvik虛擬機指令用一個類來表示
build/ 這下面就放了一些對于debug信息,異常句柄,指令,swith case塊,
trycatch 塊,函數builder的一些實現
總之這個文件夾下是支撐將smali文件寫回為dex文件的類庫
dexbacked 這個目錄其實是將輸入的dex進行解析后接受的類庫
dexbacked/instruction 解析后的dex的所有指令存放的類,也是以某類指令建立類來接收的
dexbacked/raw
對于dex文件結構的各個組件接收的類。比如typeid,stringid,classdef,protoid,mapitem,headeritem,這些對比dex文件的結構就能和這些類一一對應起來
dexbacked/reference dex文件中的成員變量索引,方法索引,字符串索引,類型索引的類
dexbacked/util 一些小的工具的類集合
dexbacked/value 還是跟初始值相關的類
dexbacked 一些更加上層抽象的類,表示的信息量更多,比如DexBackedClassDef.java
就表示一個類,但是這個類又是由n個成員變量,n個方法來表示的,對于
成員變量又涉及到了初始值,權限,訪問屬性,本身定義等,
對于成員方法就更復雜了,除了指令還有try catch信息 debug信息,注釋信息等等
總之, dexbacked這個類庫,有java語言完整表達了整個dex文件的文件結構,細化到dex文件的每個細節,就是說這個文件夾下的類已經能夠涵蓋dex文件所有的東西,里面的每個類,每個方法,每條指令都能從這個文件夾下找到相應的類來表示。
iface 這個就是一個接口定義類,前面提到的base抽象類都是繼承與這個文件夾下面的類,主要是為了 利用java多態的特點,減少代碼的編寫量,讓代碼看起來更加專業。
immutable
這個文件夾提供了為類,方法,成員變量,指令,各種索引的不可更改的常量定義,但是這些類本身是可以new出來的,當你要為dex文件添加類,方法,成員變量或者指令的 時候,這個文件夾下面的類就很有作用了,可以用這個文件夾下面的類輕松構造出來各種索引,達到更改dex文件的目的,一般要配合builder下的各種方法來使用
rewriter 這個文件夾下面提供了對于寫回dex文件各種函數的hook,包括寫回類的hook,
寫回方法的hook,甚至到寫回每條指令的hook,這個文件夾其實起到的作用也是為了能夠
通過hook方便的修改dex文件。
writer 寫回dex文件啟動的文件夾,前面的builder這些都是為其提供彈藥的,這里整體的dex文件的生成
,所有組織都是通過這個文件夾下面的不同的類協同完成的。
. 直接根目錄下的是更基礎的訪問權限,指令格式,操作格式,索引,值類型的一些基礎類了
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前標題:baksmali和smali源碼分析(六)-創新互聯
轉載源于:http://vcdvsql.cn/article24/cccgce.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、定制開發、關鍵詞優化、網站設計公司、網站策劃、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯