zoukankan      html  css  js  c++  java
  • 【移动安全基础篇】——12、Dalvik虚拟机

    1. Dalvik VM(DVM)和 和 Java VM(JVM) 的区别:

    1) JVM 是运行 Java 字节码,DVM 是运行 Dalvik 字节码
    2) Dalvik 可执行文件(.dex)的体积更小
    3) 虚拟机架构不同:JVM 是基于栈,DVM 是基于寄存器

    Java 代码:

    反编译 int foo(int a, int b)函数的 Java 字节码:

    反编译 int foo(int a, int b)函数的 Dalvik 字节码:

    2. Dalvik  汇编语言介绍
    v  命名法与 p  命名法:

    类型描述符:

    寄存器:

    1) DVM 寄存器都是 32bit 的,与名称无关
    2) J,D 类型,需要相邻 2 个寄存器
    3) 对象类型:Ljava/lang/String; = java.lang.String
    4) 数组:[I = int [],[[I = int [][]

    方法:

    1) 格式:Lpackage/name/ObjectName;->MethodName(III)Z
    2) 例子:method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String
    等价于:String method(int, int[][], int, String, Object[])
    字段:
    格式:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

    3.  程序编译与反编译

    主要的反编译器:

    1)jeb;
    2)AndroidKiller

    Dalvik  指令集:

    1) 空操作指令:nop
    2) 数据操作指令:move

    move vA, vB:将 vB 寄存器的值赋给 vA 寄存器,源寄存器与目的寄存器都是 4 位
    move-object/from 16 vAA, vBBBB:为对象赋值,源寄存器为 8 位,目的寄存器为 16

    4.  汇编语言实现

    对应的 Java 代码:

    编译 smali  文件:

    java –jar smali.jar –o classes.dex HelloWorld.smali

    执行程序:
    上传到手机:adb push classes.dex /data/local/
    执行程序:adb shell dalvikvm –cp /data/local/classes.dex HelloWorld

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    android NDK开发及调用标准linux动态库.so文件
    android ndk增加对stl的支持
    Android中JNI的使用方法
    OCP-1Z0-052-V8.02-55题
    OCP-1Z0-053-V12.02-162题
    OCP-1Z0-052-V8.02-52题
    OCP-1Z0-052-V8.02-50题
    OCP-1Z0-052-V8.02-49题
    Android 中Java 和C/C++的相互调用方法
    用JNI调用C或C++动态联接库入门
  • 原文地址:https://www.cnblogs.com/devi1/p/13486454.html
Copyright © 2011-2022 走看看