java smali代码 解读_baksmali和smali源码分析(一)

最近有一个项目需要修改一些dex文件,提起修改dex文件,最有名的就是baksmali和smali项目,这个项目并且开源,所以一个思路就是通过修改这个原来来实现修改dex文件的目的。

首先是下载 baksmali源码:

下载地址 https://code.google.com/p/smali/

下载完成以后,将项目导入到eclipse工程中,本来笔者认为开源项目直接导入后就能够调试了,结果发现事情远远没有那么简单,这个项目依赖了众多的jar包。

没有办法笔者只好将需要的jar包一一下载下来,然后加入到建立的工程中,如图1:

8f620edd3c584c3ae8627dcb124350da.png

主要需要的jar包以及下载地址:

1 antlr-4.2.2-complete.jar

一个开源的词法分析器的jar包,主要用于生成smali和baksmali的语法解释器的

java文件  生成的 smaliParser.java 和 smaliTreeWalker.java 这两个java文件加起来将近

1M了

下载地址

http://www.antlr.org/download/antlr-4.2.2-complete.jar

2 guava-17.0.jar

google的一个开源的库,英文单词的意思是石榴,里面实现了很多容器的类

下载地址

http://search.maven.org/remotecontent?filepath=com/google/guava/guava/17.0/guava-17.0.jar

3 jsr305-1.3.9.jar

一些用于判断对象类型是否可以为 NULL的jar包,据说将要进入JDK中

下载地址

http://www.java2s.com/Code/JarDownload/jsr305/jsr305-1.3.9.jar.zip

4 ST-4.0.8.jar

下载地址

http://www.stringtemplate.org/download/ST-4.0.8.jar

5 org.apache.commons.cli_1.2.0.v201105210650.jar

下载地址

http://dl.shiguanglu.com/jarfiles/o/org.apache.commons/org.apache.commons.cli_1.2.0.v201105210650.jar.zip

6 com.springsource.org.junit-4.7.0.jar

下载地址

将这些jar包加入到工程里面,这个时候还是会报错的,因为在源代码中放的smali语法分析器的文件形式不是java的文件形式,而是 antlr 这个语法分析器的文件形式,具体目录是在 smali/src/main/antlr3这个目录下,里面有 smaliParser.g 和 smaliTreeWalker.g 这两个文件,需要使用

java -jar antlr3.jar xx.g

这个命令将 这两个文件生成相应的java文件,然后将这两个java文件拷贝到 smali/src/main/java/org/jf/smali这个目录下

这个时候还有最后一步,就是要处理一下 smali/src/main/jflex 这个目录下的

smaliLexer.flex 这个文件了

这个文件需要下载一个叫做 jflex-1.6.0.jar 的jar包

下载地址在 http://jflex.de/download.html

然后运行

java -jar jflex-1.6.0.jar smaliLexer.flex

这个命令,生成了 smaliFlexLexer.java 这个文件

同样需要将 smaliFlexLexer.java 文件拷贝到 smali/src/main/java/org/jf/smali 这个目录下

这个时候如果你在建立的项目将源码中的test代码也导入的话,不出意外会出现一个错误,错误文件是 lexerTest.java 里面大概 163行吧,修改成下面的代码即可

//modify by sunzeduo 2014-6-23

InputStreamReader reader = new InputStreamReader(smaliStream);

就是有些jar包升级了,测试代码没有及时修改过来,导致的出现的问题,这个问题很好修改。

ok 解决完了编译问题,现在在eclipse中的样子就是如图2的样子了

aa508e93d61bab2827b8a2eff3818129.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值