java smali互相转_Smali浅析及dex,java互转

今天在看热修复时,文中多次提到smali文件,想简单了解一下Smali是什么。

Smali文件是什么?

Android程序员用Java语言开发APP,编译工具会将Java源文件(.java)编译成Dalvik可执行文件(.dex)。Android系统中Dalvik Virtual Machine 会执行该文件。smali/baksmali则是Dalvik VM可执行文件的汇编器/反汇编器。反汇编Dalvik可执行文件(.dex)后,将会得到.smali后缀文件。smali代码拥有特定的语法。

相比于.dex文件,smali文件的语法更容易理解些。下面是.dex文件、.smali文件、.java文件三者之间的转化关系。

fb9aec070c0a?from=timeline

image

为什么要学会smali

当我们反编译之后得到jar或者smali文件,android采用java语言开发,但是android系统使用自己的dalvik虚拟机,代码编译最终不是采用java的class,而是使用smali。因此我们反编译得到的代码,jar的话很多地方无法正确的解释出来,如果我们反编译的是smali则可以正确的理解程序的意思,因此学会smali十分有必要

将.java文件转化成.dex文件,在Dalvik VM中来执行.dex文件

创建java文件

public class Foo{

public static void main(String [] args){

System.out.println("Hello, world!haha");

}

}

将.java转换成.class文件

javac Foo.java

将.class转换成.dex文件,由于需要安装到设备,直接转成.apk文件

这里需要用到sdk/build-tool/ 的dx工具

dx --dex --output=foo.apk Foo.class

安装到设备上

adb push foo.apk /sdcard/

调用Dalvik VM执行foo.apk

adb shell

dalvikvm -cp /sdcard/foo.apk Foo

显示如下结果:

fb9aec070c0a?from=timeline

执行foo.apk

.dex文件转换成.smali文件

这里我们要用到一个工具smali.jar,点此下载

fb9aec070c0a?from=timeline

转换.smali文件

.smali文件转换成.dex文件

fb9aec070c0a?from=timeline

转换.smali文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值