Android培训班 66 dex文件打开流程
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
下面来分析这个函数代码,如下:
intdexZipPrepArchive(int fd, const char* debugFileName, ZipArchive*pArchive)
{
这个函数输入文件句柄、文件名称、压缩文件对象。
MemMapping map;
int err;
map.addr = NULL;
memset(pArchive, 0, sizeof(*pArchive));
pArchive->mFd = fd;
这行代码是保存文件句柄。
if (sysMapFileInShmem(pArchive->mFd,&map) != 0) {
err = -1;
LOGW("Map of '%s' failed\n",debugFileName);
goto bail;
}
if (map.length < kEOCDLen) {
err = -1;
LOGV("File '%s' too small to be zip(%zd)\n", debugFileName,map.length);
goto bail;
}
这段代码映射文件数据到内存。
if (!parseZipArchive(pArchive, &map)) {
err = -1;
LOGV("Parsing '%s' failed\n",debugFileName);
goto bail;
}
这段代码是分析zip文件。
/* success */
err = 0;
sysCopyMap(&pArchive->mMap, &map);
map.addr = NULL;
这段代码拷贝到映射位置。
bail:
if (err != 0)
dexZipCloseArchive(pArchive);
if (map.addr != NULL)
sysReleaseShmem(&map);
return err;
}
函数dexZipPrepArchive的处理,主要就是先保存文件句柄,然后创建文件内存映射,调用parseZipArchive函数来分析zip的所有入口点,并记录到相应的hash表里,最后调用sysCopyMap函数来保存到zip文件对象结构里。
由上面分析可知,dex文件是压缩成zip文件,这样可以减少占用空间。dex文件在系统里是怎么样打开的过程呢?其它经过下面的过程:
1)系统初始化虚拟机时,会初始化原始方法gDvmNativeMethodSet集合。
2)在原始方法集合里有一个函数集合dvm_dalvik_system_DexFile,注册它为Ldalvik/system/DexFile串,当虚拟机调用DexFile相关函数时,就会调用这些函数来处理Dex文件。
3)在处理Dex文件时,会调用函数集合:dvm_dalvik_system_DexFile,这个函数集合里,主要有如下函数:
constDalvikNativeMethod dvm_dalvik_system_DexFile[] = {
{"openDexFile", "(Ljava/lang/String;Ljava/lang/String;I)I",
Dalvik_dalvik_system_DexFile_openDexFile},
{"closeDexFile", "(I)V",
Dalvik_dalvik_system_DexFile_closeDexFile},
{"defineClass", "(Ljava/lang/String;Ljava/lang/ClassLoader;ILjava/security/ProtectionDomain;)Ljava/lang/Class;",
Dalvik_dalvik_system_DexFile_defineClass},
{"getClassNameList", "(I)[Ljava/lang/String;",
Dalvik_dalvik_system_DexFile_getClassNameList},
{"isDexOptNeeded", "(Ljava/lang/String;)Z",
Dalvik_dalvik_system_DexFile_isDexOptNeeded},
{NULL, NULL, NULL },
};
openDexFile方法对应的原始函数是Dalvik_dalvik_system_DexFile_openDexFile,它是打开Dex文件函数。
closeDexFile方法对应的原始函数是Dalvik_dalvik_system_DexFile_closeDexFile,它是关闭已经打开的Dex文件函数。
4)在Dalvik_dalvik_system_DexFile_openDexFile函数里,调用函数dvmJarFileOpen打开JAR或者ZIP压缩的文件。
5)在dvmJarFileOpen函数里,调用dexZipOpenArchive来处理ZIP文件,调用dexZipFindEntry函数读取ZIP解压的文件,调用dvmDexFileOpenFromFd函数读取相应的类数据到内存,并返回给虚拟机。
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
Android培训班 66 dex文件打开流程相关推荐
- Android培训班(67)dex文件打开流程
从上面可知调用函数Dalvik_dalvik_system_DexFile_openDexFile来打开Dex文件,这个函数的源码如下: staticvoid Dalvik_dalvik_system ...
- Android培训班(62)dex文件格式3
SHA-1签名字段 从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还 ...
- Android的img镜像文件打开
有时需要获取系统的一些资源,就需要打开img镜像文件:可以使用:ext2explore.exe.exe 此篇以打开Android API 22的system.img为例,system.img文件可以在 ...
- html格式打开软件打开方式,eps用什么软件打开方式(一文教你eps文件打开流程)...
将DWG 矢量图转换成图片的方法有多种,它们之间的区别在于像素有高有低,常用的有6种方法. 1.高像素输出的方法有: (1)WMF图形格式转换法(这个方法我之前的文章介绍过) (2)EPS图形格式转换 ...
- 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )
文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...
- Android动态加载dex文件/jar包的纯原生代码实现(dex文件由服务端下发)
介绍原理的文章有很多,我就不再多说,直奔主题: 一.生成dex文件(源码下载地址:https://download.csdn.net/download/wanggangyanqing/18658862 ...
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...
- Android中dex文件的加载与优化流程
目录 1.dex文件分析...1 2.odex文件...2 2.1.odex文件结构...2 2.2.odex文件结构分析...3 3.dex文件的验证与优化...3 3.1 dex文件加载流程... ...
最新文章
- 漫谈五种IO模型(主讲IO多路复用)
- 唐杉博士:人工智能芯片发展及挑战
- vue树形结构html,怎么在vue中利用递归组件实现一个树形控件
- 《计算机图形学》2.1.7 立体感和虚拟现实系统
- python的循环语句机制_Python-for循环的内部机制
- 西北大学计算机排行,世界排名领先,西北大学到底有多厉害?
- 第二阶段团队绩效考核报告
- 数据结构与算法-什么是数据结构,什么是数据,什么是抽象数据类型
- 学术 | 基于深度学习的图像边缘和轮廓提取方法介绍
- IPMP 认证考试知识点
- JQuery使用总结
- windows安装ubuntu系统的注意事项小记
- DIY制作修改替换PPC手机短信背景图片的技巧
- rss订阅_RSS订阅
- 计算机对学习的好处,学习计算机的好处
- 极化的概念及天线极化方式
- 书评与摘抄《经济学原理》
- jFreeChart+itext生成带统计图的pdf文件
- java绘制流程图基本元素,java绘制图片
- html dom反选,Dom操作--全选反选