简介
可执行文件是操作系统的基础,它反映着系统的运行机制,Android系统的可执行文件也是如此。
Apk
Apk是Android Package的缩写,实际上Apk文件就是一个zip压缩包,使用zip格式解压缩软件对apk文件进行解压,会发现它由一些图片资源与其它文件
组成,并且每个apk文件中包含一个classes.dex,它是Dalvik可执行文件。
dex 文件格式
在Android系统中,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。通过ADT,经过复杂的编译,可以把java源代码转换为dex文 件。 那么这个文件的格式是什么样的呢?为什么Android不直接使用class文件,而采用这个不一样文件呢?其实它是针对嵌入式系统优化的结 果,Dalvik虚拟机的指令码并不是标准的Java虚拟机指令码,而是使用了自己独有的一套指令集。如果有自己的编译系统,可以不生成class文件, 直接生成dex文件。dex文件中共用了很多类名称、常量字符串,使它的体积比较小,运行效率也比较高。但归根到底,Dalvik还是基于寄存器的虚拟机
的一个实现。
Dex文件头主要包括校验和以及其他结构的偏移地址和长度信息。
字段名称
偏移值
长度
描述
magic |
0x0 |
8 |
'Magic'值,即魔数字段,格式如”dex/n035/0”,其中的035表示结构的版本。 |
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 |
标识字节顺序的常量,根据这个常量可以判断文件是否交换了字节顺序,缺省情况下=0x78563412。 |
link_size |
0x2C |
4 |
连接段的大小,如果为0就表示是静态连接。 |
link_off |
0x30 |
4 |
连接段的开始位置,从本文件头开始算起。如果连接段的大小为0,这里也是0。 |
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 |
数据段的大小,必须以4字节对齐。 |
data_off |
0x6C |
4 |
数据段基地址 |
odex文件格式
odex是OptimizedDEX的缩写,表示经过优化的dex文件。
odex有两种存在的方式:一种是从apk程序中提取出来的,与apk文件存放在同一目录且文件后缀为odex的文件,这类odex文件多是Android ROM的系统程序;
另一种是dalvik-cache缓存文件,这类Odex文件仍然以dex作为后缀,存放在cache/dalvik-cache目录下,保存的形式为“apk路径@apk名@classes.dex”。
dex文件的验证
Android提供了一个专门验证与优化dex文件的工具dexopt,该软件是开源的,可以下载到源码,验证过程如下:
小结
了解了dex、odex文件格式,对Android程序本身有更深层次的认识。当然也可以通过修改dex中的执行路径从而破解程序,因为Android应用程序的代码都存储在dex文件中。
相关下载
实例以及工具源码下载
分享到:
相关推荐
android 下可以执行的ipfs可执行文件 push到android的/system/bin目录下 修改755权限可以执行
可以可靠地浏览任何Android的可执行文件,并显示出重要的信息,如类接口和成员,DEX计数和依赖。
Linux交叉编译出来的,安卓上可直接运行的可执行文件,GhostScript 版本为9.23,用adb push 到/system/bin 目录后,可以直接在adb里输 gs -h 查看版本信息等
Android 加载执行ELF可执行文件
在 Android 4.4.4 平台下 移植的 Fio - Flexible I/O tester 已在 ODROID -XU4 android 上 成功运行
ffmpeg6.2.2-库、头文件、可执行程序 for android.把库文件放在system/lib目录下后,可以直接执行可执行程序。库也可以供开发者使用。
本文件是Android iptables可执行文件,有关Android iptables可执行文件的具体命令,请参考博文:http://blog.csdn.net/l1028386804/article/details/47356011
android JNI运行NDK编译成的可执行文件。 具体信息参考博客http://blog.csdn.net/csdn49532/article/details/50698666
CrashMonkey4Androd_binCrashMonkey4Android可执行文件
在 Android 12.0平台下 移植的 Fio - Flexible I/O tester 已在 VIM4 android 上 成功运行
androidScreen 第二版可执行文件,(含sp) 使用说明:http://blog.csdn.net/i7788/article/details/46444829
使用 Android NDK 为不同的移动架构构建 rsync 可执行文件
直接用于在android系统下运行的iozone可执行文件。使用方法: 1.将下载的iozone文件通过ADB拷贝到android平台的/data下. 2.进入/data下,执行iozone文件,如:./iozone -t 2 -s 3m -r 50k -F test1.txt test2.txt -...
gdb动态调试android可执行程序1
内含hcitool hciconfig btmon hciattach 源码及编译好的bin bin是arm64架构
Android平台 tcpdump可执行文件,可以将网络中传送的数据包完全截获下来提供分析
Android文件管理器(增加了文件夹复制移动,下载资源暂停删除等,以及复制过程中的可视化进程)是一个基于Android开发的应用,包含常用文件操作以及文件下载功能,文件操作包括打开文件夹...里面附有所有的可执行源码。
mosquito-1.5源码编译生成的可执行文件、配置文件以及动态库等。
mp4box 版本0.5.2,mp4格式的编辑工具。是可执行文件,在安卓手机的终端模拟器的sh命令行下执行。我是在手机的安卓系统下编译,gcc编译参数是-march=armv6 -pie