baksmali和smali源码分析(六)-创新互联

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代码目录

baksmali和smali源码分析(六)

这个是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源码分析(六)-创新互联
转载源于:https://www.cdcxhl.com/article24/cccgce.html

成都网站建设公司_创新互联,为您提供营销型网站建设定制开发关键词优化网站设计公司网站策划网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设