对于dex
字节码,官方提供了三篇文档对其进行比较详尽的介绍,分别是:
- Dalvik bytecode :主要介绍的是Dalvik字节码的总体设计理念,还提供了全部的字节码指令介绍。如果没有一点计算机系统相关知识,还是比较难懂的,有部分的描述也不是太清晰,可参考本人这篇文章的翻译:Dalvik bytecode的总体设计
- Dalvik Executable instruction formats :主要讲解的是
dex
指令的二进制格式。 - Dalvik Executable format :介绍的是
Dex
文件的格式。
上面三篇文章,通读下来,如果不认真仔细看,很难把它们之间的关系串联起来,在实际阅读分析系统源码或者一些字节码指令时,还是较为困难的。下面就以一个实际例子,分析dex
字节码指令的运用和阅读。
源码例子
public class Main {
public static void main(String[] args) {
Hello hello = new Hello();
String sentence = hello.sayHello();
System.out.printf(sentence);
}
public static class Hello {
public String sayHello() {
return "hello!!!!";
}
}
}
我们主要分析 String sentence = hello.sayHello();
这行代码的字节码指令情况。
使用工具,将上面源码编译成dex
文件,用 010编译器 打开 :
从上图看,dex
文件总体的格式,就如 Dalvik Executable format 中介绍的一样。上图中对应字段,和下图