zoukankan      html  css  js  c++  java
  • Android逆向基础----Dalvik字节码

    参考此微博,更多详细内容可以到这里查看

    http://blog.csdn.net/dd864140130/article/details/52076515

    Dalvik字节码

    1、寄存器位32位,64位数据(double)用两个相邻的32寄存器表示。

    2、两种类型:基本类型和引用类型(对象和数组)

    全限定名是什么?

    以String为例,其完整名称是Java.lang.String,那么其全限定名就是java/lang/String;,即java.lang.String的”.”用”/”代替,并在末尾添加分号”;”做结束符.

    Dalvik字节码类型描述符

    V     void               只能用于返回值类型

    Z     boolean         逻辑值,返回真(true)假(false)

    B     byte              字节型

    S     short             短整型

    C     char              字符型

    I      int                 整数型

    J      long(64位)长整型

    F     float              浮点型

    D     double          双精度浮点

    L     对象类型,java类

    java->package.name.ObjectName;

    Davik->Lpackage/name/ObjectName

    [      数组类型

    java->int[]     int[][]      三维数组

    Davik->[I;      [[I;   [[[I;

    字段的描述

    Davik中对字段的描述分为两种,对基本类型字段的描述和对引用类型的描述,但两者的描述格式一样:

    对象类型描述符->字段名:类型描述符;

    比如com.sbbic.Test类中存在String类型的name字段及int类型的age字段,那么其描述为:

    Lcom/sbbic/Test;->name:Ljava/lang/String;

    Lcom/sbbic/test;->age:I

    Dalvik指令集

    数据定义指令      const

    const-赋值方法 寄存器名 附加内容

    指令

    描述

    const/4 vA,#+B

    将数值符号扩展为32后赋值给寄存器vA

    const-wide/16 vAA,#+BBBB

    将数值符号扩展为64位后赋值个寄存器对vAA

    const-string vAA,string@BBBB

    通过字符串索引高走字符串赋值给寄存器vAA

    const-class vAA,type@BBBB

    通过类型索引获取一个类的引用赋值给寄存器vAA

    数据操作指令      move

    指令

    描述

    move vA,vB

    将vB寄存器的值赋值给vA寄存器,vA和vB寄存器都是4位

    move/from16 vAA,VBBBB

    将vBBBB寄存器(16位)的值赋值给vAA寄存器(7位),from16表示源寄存器vBBBB是16位的

    move/16 vAAAA,vBBBB

    将寄存器vBBBB的值赋值给vAAAA寄存器,16表示源寄存器vBBBB和目标寄存器vAAAA都是16位

    move-object vA,vB

    将vB寄存器中的对象引用赋值给vA寄存器,vA寄存器和vB寄存器都是4位

    move-result vAA

    将上一个invoke指令(方法调用)操作的单字(32位)非对象结果赋值给vAA寄存器

    move-result-wide vAA

    将上一个invoke指令操作的双字(64位)非对象结果赋值给vAA寄存器

    mvoe-result-object vAA

    将上一个invoke指令操作的对象结果赋值给vAA寄存器

    move-exception vAA

    保存上一个运行时发生的异常到vAA寄存器

    3.跳转指令

    if-eq

    等于则跳转

    ==

    if-ne

    不等于则跳转

    !=

    if-lt

    小于则跳转

    <

    if-ge

    大于或等于则跳转

    >=

    if-gt

    大于则跳转

    if-le

    小于或等于则跳转

    <=

    goto

    无条件跳转

    switch

    分支跳转

    返回0 实现跳转

    知识要大家一起分享,但带上原文链接是对作者的尊重。
  • 相关阅读:
    sql server delete语句
    sql server 通配符
    sql server join联结
    windows下如何使用两个版本的nodejs
    PHP的Trait 特性
    PHP错误与异常处理try和catch
    laravel belongsTo()&hasOne()用法详解
    Laravel Model 的 fillable (白名单)与 guarded (黑名单)
    js原生,缓动动画封装
    js原生轮播图
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/6916546.html
Copyright © 2011-2022 走看看