您好,登录后才能下订单哦!
这一节,主要介绍一下 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 一些能够提取出来的辅助类的实现
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。