Dex文件的内存映射
来源:互联网 发布:判断素数的条件c语言 编辑:程序博客网 时间:2024/05/01 23:30
1、背景介绍
前面我们了解过dex文件的文件格式,数据类型等知识,这里我们来简单分析一下,dex文件在内存中的映射关系。
DexFile的结构体源码如下:
struct DexFile { /* directly-mapped "opt" header */ const DexOptHeader* pOptHeader; /* pointers to directly-mapped structs and arrays in base DEX */ // 映射Dex整体文件 const DexHeader* pHeader; const DexStringId* pStringIds; const DexTypeId* pTypeIds; const DexFieldId* pFieldIds; const DexMethodId* pMethodIds; const DexProtoId* pProtoIds; const DexClassDef* pClassDefs; const DexLink* pLinkData; // 一些附加的节段信息 const DexClassLookup* pClassLookup; const void* pRegisterMapPool; // RegisterMapClassPool /* points to start of DEX file data */ // 指向Dex文件开始 const u1* baseAddr; /* track memory overhead for auxillary structures */ // 附属的内存数据 int overhead; /* additional app-specific data structures associated with the DEX */ //void* auxData;};
2、DexMapList结构体
在DexHeader结构中,有一个mapOff字段,它指明了DexMapList结构在dex文件中的偏移,它的声明如下:
struct DexMapList{ u4 size;// DexMapItem的个数 DexMapItem list[1];};struct DexMapItem { u2 type; u2 unused; u4 size; u4 offset;};
第一个字段表示item的类型,unused暂时没有用处,size表示这样类型的item有几个,offset表示相对于文件开始地址的偏移。
3、Hello.dex分析
在Hello.dex文件中,mapOff字段值为0X290,读取此处一个双字值为0X0d,表明接下来会有13个DexMapItem结构。使用C32asm打开dex文件,如图所示:
0X290处的值:
mapOff处的字段值:
4、内存地址分析
这里我们给出dexmap的结构图示,其实是一些结构体。下面就是在Hello.dex文件分析中得到的13个结构体的数据,偏移量等信息,如下图所示:
这里表示HeaderItem有0x1个,偏移为0x0,TypeStringIdItem个数为0x10,偏移为0x70,后面的大家以此类推。
5、注意事项
对于刚开始分析内存地址,汇编代码等的同学,可能看不太明白,这里的数据是怎么的出来的。这里涉及到一些寄存器地址存储方式的问题,有的地址是从低位向高位,有的是从高位向低位划分。
在下面这幅图中,我将这幅图示与我们4中的图片数据,用红线做了划分,大家对照着看,应该能够明白地址的存储方式。建议大家对比看看,手动的在草稿纸上画画,就明白是什么意思了。
挺别人说的,不如自己手动划一下来得深切,大家动手看看吧。
0 0
- Dex文件的内存映射
- 文件的内存映射
- 文件的内存映射
- 映射内存的文件
- 内存映射文件的使用
- PE文件的内存映射
- 内存映射文件的解析
- 内存映射:内存映射文件
- 内存映射:内存映射文件
- 页文件支持的内存映射文件
- 文件的内存映射小结(一)
- 文件的内存映射小结(二)
- Linux的mmap文件内存映射机制
- 文件映射内存的函数说明
- Linux的mmap文件内存映射机制
- Linux的mmap文件内存映射机制
- 大数据量文件的内存映射
- 内存映射文件的使用步骤
- @MappedSuperclass
- Oracle自带的用户
- Leetcode:Longest Valid Parentheses
- 黑马程序员——6、OC语言(基本语法)
- 转载将多个工程打包成一个apk
- Dex文件的内存映射
- 使用QUdpSocket进行UDP编程
- android学习笔记之说说drawable目录下的xml
- 项目组成员工作积极性变高了
- Bootstrap 自定义分页方法
- Java异常
- UVA 348 - Optimal Array Multiplication Sequence
- DLL导出类
- SQL连接字符串