Java 代码一步一步转为Smali代码

Java 代码转为Smali代码

由Java到Smali本来是不需要这么麻烦的,但是为了能对比研究Smali语法,所以,采取Java源代码一步一步编译成Smali代码,对比学习Smali的语法。

一、所需文件

二、转换步骤

第一步:编写Java代码

以简单的Hello.jar为例

//Hello.java
public class Hello {
    public int foo(int a, int b) {
        return (a + b) * (a - b);
    }

    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println("result is " + hello.foo(10, 20));
    }
}

第二步:由 javac命令编译为 我们都熟知的.class文件

javac Hello.java

可以在当前目录下看到,已经Hello.class已经存在:

这里写图片描述

另外也可以添加-d参数,来指定class文件的存放路径

第三步:使用 dx.jar 生成dex文件

java -jar /Volumes/Dev/environment/Android/sdk/build-tools/26.0.2/lib/dx.jar --dex --output=Hello.dex Hello.class

有几点需要注意的地方:

  1. –output=XX可以指定生成文件的名称和路径

  2. java -jar SDK_HOME_/build-tools/26.0.2/lib/dx.jar可以由SDK_HOME_/build-tools/26.0.2/dx代替

然后来看下成果:

这里写图片描述

第四步:使用baksmali.jar 将dex转为我们最终的目标文件 smali文件

java -jar /Volumes/Dev/Develop/反编译/tool/baksmali-2.2.5.jar dis Hello.dex

也许是baksmali的作者更新了使用方法,我浏览过的文章所说的 basksmali -o XX已经不能正常使用了,如果本文的参数也不能继续使用可以尝试使用

 java -jar /Volumes/Dev/Develop/反编译/tool/baksmali-2.2.5.jar -h

查看最新的commond参数。

这样我们想要的Smali文件就生成了

这里写图片描述

三、Smali文件查看

smali文件查看我是使用的VsCode,包括Java代码的编写,命令行的操作均在VsCode 上操作完成。

VsCode下载地址:https://code.visualstudio.com/Download

Smali文件查看需要下载一插件,很简单,在VsCode插件中心搜索smali就可以了。 同时,右侧便是打开的smali文件。

这里写图片描述

四、结语

首先看一下最终的效果:左右两侧,可以对比查看两者的不同。

这里写图片描述

最后还是有带补充可提高的地方,记录一下:

  1. 本次一步一步记录了Java代码转换为Smali文件的过程,过程还是比较复杂的,但是为了方便了解转换过程,也是学习的过程。考虑后续可以写成脚本的形式。当然,脚本本人也是需要学习的…

  2. 另外VsCode配置Java的开发环境,也会单独出一篇文章,记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JichinX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值