分享一下我老师大神的人工智能教程!零基础,通俗易懂!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文件打开流程相关推荐

  1. Android培训班(67)dex文件打开流程

    从上面可知调用函数Dalvik_dalvik_system_DexFile_openDexFile来打开Dex文件,这个函数的源码如下: staticvoid Dalvik_dalvik_system ...

  2. Android培训班(62)dex文件格式3

    SHA-1签名字段    从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还 ...

  3. Android的img镜像文件打开

    有时需要获取系统的一些资源,就需要打开img镜像文件:可以使用:ext2explore.exe.exe 此篇以打开Android API 22的system.img为例,system.img文件可以在 ...

  4. html格式打开软件打开方式,eps用什么软件打开方式(一文教你eps文件打开流程)...

    将DWG 矢量图转换成图片的方法有多种,它们之间的区别在于像素有高有低,常用的有6种方法. 1.高像素输出的方法有: (1)WMF图形格式转换法(这个方法我之前的文章介绍过) (2)EPS图形格式转换 ...

  5. 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )

    文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...

  6. Android动态加载dex文件/jar包的纯原生代码实现(dex文件由服务端下发)

    介绍原理的文章有很多,我就不再多说,直奔主题: 一.生成dex文件(源码下载地址:https://download.csdn.net/download/wanggangyanqing/18658862 ...

  7. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )

    文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...

  8. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )

    文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...

  9. Android中dex文件的加载与优化流程

    目录 1.dex文件分析...1 2.odex文件...2 2.1.odex文件结构...2 2.2.odex文件结构分析...3 3.dex文件的验证与优化...3 3.1 dex文件加载流程... ...

最新文章

  1. 漫谈五种IO模型(主讲IO多路复用)
  2. 唐杉博士:人工智能芯片发展及挑战
  3. vue树形结构html,怎么在vue中利用递归组件实现一个树形控件
  4. 《计算机图形学》2.1.7 立体感和虚拟现实系统
  5. python的循环语句机制_Python-for循环的内部机制
  6. 西北大学计算机排行,世界排名领先,西北大学到底有多厉害?
  7. 第二阶段团队绩效考核报告
  8. 数据结构与算法-什么是数据结构,什么是数据,什么是抽象数据类型
  9. 学术 | 基于深度学习的图像边缘和轮廓提取方法介绍
  10. IPMP 认证考试知识点
  11. JQuery使用总结
  12. windows安装ubuntu系统的注意事项小记
  13. DIY制作修改替换PPC手机短信背景图片的技巧
  14. rss订阅_RSS订阅
  15. 计算机对学习的好处,学习计算机的好处
  16. 极化的概念及天线极化方式
  17. 书评与摘抄《经济学原理》
  18. jFreeChart+itext生成带统计图的pdf文件
  19. java绘制流程图基本元素,java绘制图片
  20. html dom反选,Dom操作--全选反选

热门文章

  1. 牛人经验2(国家形势与个人选择以及创业)
  2. (五)Ps裁剪/切片
  3. 干货分享!为你详细解答软考中级科目
  4. 洛希极限 Java版 PTA
  5. Ubuntu18.04将Python升级到3.8
  6. 达人评测锐龙R7 6850HS和R5 6600U选哪个好
  7. ConcurrentModificationException 及 快速失败(fail-fast)
  8. Patricia Trie与Radix Trie的不同
  9. mysql与access_mysql和access的区别是什么?
  10. PS 图像特效算法— —渐变