zoukankan      html  css  js  c++  java
  • [转]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文件三者之间的转化关系。

    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文件

    作者:罗拙呓
    链接:https://www.jianshu.com/p/fb9aec070c0a
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Arr
    class4
    class3联大网页
    class33
    class3
    人机交换 NO 1书签
    大数据的框架与特点
    mapreduce排序
    mapreduce求平均数
    mapreduce去重
  • 原文地址:https://www.cnblogs.com/beansoft/p/15495916.html
Copyright © 2011-2022 走看看