• Android反编译后代码阅读


    1.反编译

    可以查看批量修改安卓apk包名,这里不做介绍,这篇主要介绍如何阅读反编译后的java代码, 反编译出的java代码以smali的形式存在,这是一种类似于汇编的语言。android目前使用的是dalvik虚拟机,所以下面的叙述都是基于dalvik虚拟机字节码。

    2. 正文

    2.1 类型
    dalvik字节码只有两种基本类型,即原始数据类型和引用类型。数组(Array)和对象(object)是引用类型,其余都是原始数据类型

    2.1.1 原始数据类型可以用一个字符表示它们的类型,下面是它们的对应表

    字母 类型
    V void - can only be used for return types
    Z boolean
    B byte
    S short
    C char
    I int
    J long (64 bits)
    F float
    D double (64 bits)

    2.1.2 对象类型

    格式 Lpackage/name/ObjectName;

    字段 意义
    L object
    package/name/ 表示包名
    ObjectName 类型名
    结束

    举例说明(在java中的对应关系)
    Ljava/lang/String; ---> java.lang.String

    2.1.3 数组

    格式 [I

    字段 意义
    [I int类型的一维数组
    [[I int类型的二维数组

    以此类推,几个[表示几维数组

    举例说明(在java中的对应关系)
    [I ---> int []

    2.2 方法

    格式
    .method [public] [static] methodName(param_list)return_type
    .end method
    
    注意:[]表是可以选,比如static可以没有,public可以是private
    
    举例:
    .method public CheckNetWorking()I
    .end method
    解析:以下是java代码
    public int CheckNetWorking()
    {
    }
    

    2.3 Fields表示类的成员变量

    举例:
    .field private static appid:Ljava/lang/String;
    解析:以下是java代码
    private static String appid;
    

    2.4 寄存器(Registers)

    寄存器包含本地变量和参数,本地变量从v0v4一共5个,参数从p0p2三个参数

    Local Param
    v0 the first local register
    v1 the second local register
    v2 p0 the first parameter register
    v3 p1 the second parameter register
    v4 p2 the third parameter register

    3.参考资料

    https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
    https://github.com/JesusFreke/smali/wiki/Registers
    https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

  • 相关阅读:
    io学习三
    io学习二
    io学习一
    多线程学习(十五)
    spring源码阅读(四)
    多线程学习(十四)
    多线程学习(十三)
    设计模式(一)
    spring源码阅读(三)
    spring源码阅读(二)
  • 原文地址:https://www.cnblogs.com/zjzyh/p/6601204.html
Copyright © 2020-2023  润新知