Android安全与逆向之Dalvik虚拟机架构和如何执行程序以及JIT(即时编译)

1、Dalvik虚拟机架构和Java虚拟机的架构不同

1、Java虚拟机基于栈结构,需要频繁从栈读取或写入数据,这个过程需要更多的指令与内存访问次数,会消耗cpu时间
2、Dalvik虚拟机基于寄存器,数据访问通过寄存器直接传递,比栈方式快。

     public class Hello {
         public int foo(int a, int b) {
         return (a + b) * (a - b);
     }

    public static void main(String[] args) {
      Hello hello = new Hello();
      System.out.println(hello.foo(5, 3));
     }
    }


保存为Hello.java文件,打开终端执行
javac Hello.java 编译生存Hello.class文件
然后再执行 dx --dex --output=Hello.dex Hello.class 生存dex文件
javap -c -classpath .Hello 命令执行后得到下面代码:

public int foo(int, int);
Code:
 0: iload_1
 1: iload_2;
   2: iadd
   3: iload_1
   4: iload_2
   5: isub
   6: imul
   7: ireturn


使用dexdump.exe查看foo()函数的Dalvik字节码,执行下面命令
dexdump.exe -d Hello.dex
得到如下代码
   0000:add-int v0, v3, v4
   0002:sub-int v1, v3, v4
   0004:mul-int/2addr v0, v1
   0005:return v0
 

Java字节码分析:8个命令 8个字节,至于怎么压栈进栈就不详细讲了
Dalvik字节码分析:4条命令完成操作
代码指令减少,速度更快。
2、Dalvik虚拟机如何执行程序的


Android系统有Linux内核、函数库、Android运行时、应用程序框架和应用层组成。Dalvik虚拟机属于Android运行时环境

更多请见:http://www.mark-to-win.com/tutorial/52021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值