美文网首页
Smali浅析及dex,java互转

Smali浅析及dex,java互转

作者: 罗拙呓 | 来源:发表于2018-03-15 15:29 被阅读0次

    今天在看热修复时,文中多次提到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文件三者之间的转化关系。

    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
    

    显示如下结果:

    执行foo.apk

    .dex文件转换成.smali文件

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

    转换.smali文件

    .smali文件转换成.dex文件

    转换.smali文件

    相关文章

      网友评论

          本文标题:Smali浅析及dex,java互转

          本文链接:https://www.haomeiwen.com/subject/fxyhqftx.html