这一节,主要介绍一下 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
这两个工具在源码中分别对应两个文件夹,下面见图三,源码文件夹的样子
在分析源码之前,这里我先将这些文件夹下的主要作用来说明一下,让大家有个总体的认识
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 一些能够提取出来的辅助类的实现
baksmali和smali源码分析(二),布布扣,bubuko.com
原文地址:http://sunzeduo.blog.51cto.com/2758509/1540092