Android dex学习
编写一个java代码
public class first
{
public static void main(String[] args)
{
System.out.println("xxxxxxx!");
}
}
用javac编译(配置好java环境)
PS C:\Users\49227\Desktop> javac C:\Users\49227\Desktop\first.java
用java first输出一下
编译为.class文件 .class并不是直接运行在系统进程上的,而是通过一个java虚拟机来进行托管。
class文件就不解析了 可以用 javap -v first 命令查看一下大致情况
把class文件转换为dex文件,用Android SDK路径下的./build-tools/…/dx
dx --dex --output=first.dex first.class
头文件信息
magic 0x0 8 魔数字段,值为”dex\n035\0”
checksum 0x8 4 校验码
signature 0xc 20 sha-1签名
file_size 0x20 4 dex文件总长度
header_size 0x24 4 文件头长度,009版本=0x5c,035版本=0x70
endian_tag 0x28 4 标示字节顺序的常量
link_size 0x2c 4 链接段的大小,如果为0就是静态链接
link_off 0x30 4 链接段的开始位置
map_off 0x34 4 map数据基址
string_ids_size 0x38 4 字符串列表中字符串个数
string_ids_off 0x3c 4 字符串列表基址
type_ids_size 0x40 4 类列表里的类型个数
type_ids_off 0x44 4 类列表基址
proto_ids_size 0x48 4 原型列表里面的原型个数
proto_ids_off 0x4c 4 原型列表基址
field_ids_size 0x50 4 字段个数
field_ids_off 0x54 4 字段列表基址
method_ids_size 0x58 4 方法个数
method_ids_off 0x5c 4 方法列表基址
class_defs_size 0x60 4 类定义标中类的个数
class_defs_off 0x64 4 类定义列表基址
data_size 0x68 4 数据段的大小,必须4k对齐
data_off 0x6c 4 数据段基址
使用apktool(官网链接:https://ibotpeaches.github.io/Apktool/install/)
新建了个apktool文件夹.第一步载apktool.bat,把鼠标移至wrapper script上,然后右击,链接另存为…,把下载来的文件放到.\apktool;第二步,下载apktool.jar文件,点击find newest here,跳到下载页,修改名称为apktool.jar;第三步,配置环境变量