安卓dex 文件结构简要说明
#ifndef _DEX_FILE_HELPER_
#define _DEX_FILE_HELPER_
//此文件仅仅是起帮助作用,帮助不太了解DexFile结构的了解一下DexFile相关结构,想更具体的了解还须要參考相关源代码
//classes.dex 相应于一个结构 DexFile
//struct DexFile {
// const DexOptHeader* pOptHeader;//opt 头结构指针
// const DexHeader* pHeader;//dex header结构指针
// const DexStringId* pStringIds;//全部字符串,类似于elf的字符串表,包括全部引用符号,函数、变量等
// const DexTypeId* pTypeIds;//类型比如Ljava/lang/String、I、[B等表明一种数据类型
// const DexFieldId* pFieldIds;//属性id,来自一个类内部属性,指向它的指针
// const DexMethodId* pMethodIds;//函数id,类似于函数指针概念
// const DexProtoId* pProtoIds;//函数原型,这个原型,包括指向字符串表的符号,包括传入參数类型,和返回值类型,比如VL
// const DexClassDef* pClassDefs;//指向class对象的指针,这个class的表现形式是一种结构,这个结构包括了类的訪问属性。接口、来自文件、指向ClassCode的指针等、一看smali文件你就明确了
// const DexLink* pLinkData;//链接库指针,临时为空
// const DexClassLookup* pClassLookup;
// const void* pRegisterMapPool;//这个应该是系统提供的api级别的
// const u1* baseAddr;
// int overhead;
//};
classdef是一个最外层的类结构体,就像房子(板楼(描写叙述),在北京昌平(文件名称位置),归昌平管(继承实现)),classdata就像房子真实样子(详细这个房子布局。几个房间。几个灯等等)。codedata就相当于详细房间了(不同方法有不同的code,房子里有非常多不同的房间),大致这么讲呵呵。
当中code_item 才是(包括)真正的dalvik解释的字节码。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWxjYW5nZWw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
//解析Dex文件,能够从头解析。也能够从mapItem解析。两者有相对于的关系,而且当dex file 被填充好时,头部下面的结构也都指向相应位置
//DexFile 样例 通过dexdump获取的
//Processing 'classes.dex'...
//Opened 'classes.dex', DEX version '035'
//DEX file header:
//magic : 'dex\n035\0'
//checksum : c04ea208
//signature : 8182...4329
//file_size : 905352
//header_size : 112
//link_size : 0
//link_off : 0 (0x000000)
//string_ids_size : 6068
//string_ids_off : 112 (0x000070)
//type_ids_size : 852
//type_ids_off : 24384 (0x005f40)
//field_ids_size : 1352
//field_ids_off : 40968 (0x00a008)
//method_ids_size : 5309
//method_ids_off : 51784 (0x00ca48)
//class_defs_size : 517
//class_defs_off : 94256 (0x017030)
//data_size : 794492
//data_off : 110860 (0x01b10c)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWxjYW5nZWw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
//完整的Class结构,这个类比較简单
//////////////////////////////////////////////////////////////////////////////////////////////////////
//Class #1 header:
//class_idx : 9
//access_flags : 9729 (0x2601)
//superclass_idx : 766
//interfaces_off : 116956 (0x01c8dc)
//source_file_idx : 2232
//annotations_off : 905336 (0x0dd078)
//class_data_off : 123492 (0x01e264)
//static_fields_size : 0
//instance_fields_size: 0
//direct_methods_size : 0
//virtual_methods_size: 1
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//Class #1 -
// Class descriptor : 'Landroid/annotation/TargetApi;'
// Access flags : 0x2601 (PUBLIC INTERFACE ABSTRACT ANNOTATION)
// Superclass : 'Ljava/lang/Object;'
// Interfaces -
// #0 : 'Ljava/lang/annotation/Annotation;'
// Static fields -
// Instance fields -
// Direct methods -
// Virtual methods -
// #0 : (in Landroid/annotation/TargetApi;)
// name : 'value'
// type : '()I'
// access : 0x0401 (PUBLIC ABSTRACT)
// code : (none)
// source_file_idx : 2232 (TargetApi.java)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//class code data 就不拷贝了 太多
#endif
安卓dex 文件结构简要说明的更多相关文章
- 安卓 dex 通用脱壳技术研究(一)
注:以下4篇博文中,部分图片引用自DexHunter作者zyqqyz在slide.pptx中的图片,版本归原作者所有: 0x01 背景介绍 安卓 APP 的保护一般分为下列几个方面: JAVA/C代码 ...
- 安卓Dex壳技术探讨(1)
最近在研究安卓平台的加壳技术,以前以为只有原生层的代码才可以加壳,看了看网上的资料,才发现原来Java层也可以加壳,虽然与传统的壳有些区别,但就最终的效果来说,反静态分析的目的还是达到了的. 目前安卓 ...
- 安卓 dex 通用脱壳技术研究(二)
0x03 DexHunter代码分析 DexHunter 实现中,只需要修改一处文件:dalvik\vm\native\dalvik_system_DexFile.cpp 下面是BeyondCompa ...
- 安卓 dex 通用脱壳技术研究(三)
/* 此为DexHunter实现的主要功能,进行内存dump,将class_def_items中dump出classdef和extra部分 */ void* DumpClass(void *p ...
- 安卓 dex 通用脱壳技术研究(四)
/* 当第一个类执行到此函数时,我们在dvmDefineClass执行之前,也就是第一个类加载之前 注入我们的dump代码:即DumpClass()函数 */ static void ...
- Android: samil语法指令集-基于dex文件结构的寄存器虚拟机
Smali文件结构解 Smali文件与java中的类是一一对应的,包括内部类和匿名内部类也会生成对应的smali文件(典型的比如实现某个接口的匿名内部类),所以你会看到.smali文件比.java ...
- 看雪 安卓 dex文件
http://bbs.pediy.com/showthread.php?t=177114
- 一文了解安卓APP逆向分析与保护机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- 【腾讯优测干货分享】如何降低App的待机内存(五)——优化dex相关内存及本章总结
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw 1.5案例:优化dex相 ...
随机推荐
- document.mozFullScreen
非标准该特性是非标准的,请尽量不要在生产环境中使用它! 概述 返回一个布尔值,表明当前文档是否处于全屏模式. 语法 var isFullScreen = document.mozFullScreen ...
- python3 操作excel表
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库可从这里下载https://pypi.python.org/pypi.下面分别记录py ...
- Spring框架系列(三)--Bean的作用域和生命周期
Bean的作用域 Spring应用中,对象实例都是在Container中,负责创建.装配.配置和管理生命周期(new到finalize()) Spring Container分为两种: 1.BeanF ...
- Redis系列(八)--缓存穿透、雪崩、更新策略
1.缓存更新策略 1.LRU/LFU/FIFO算法剔除:例如maxmemory-policy 2.超时剔除,过期时间expire,对于一些用户可以容忍延时更新的数据,例如文章简介内容改了几个字 3.主 ...
- Getting start with dbus in systemd (03) - sd-bus.h 使用例子 (systemd version>=221)
sd-bus.h 例子 注意: sd-dbus 是systemd提供的lib,但是这个lib,只有在systemd>v221版本后才可以使用,centos 219版本太低,所以不能使用. 参考: ...
- Openstack manila的一些命令
(本文是测试环境进行的操作:) 1.查看一些信息: [root@openstackcontroller ~]# manila type-list [root@openstackcontroller ~ ...
- buf.readUIntBE()
buf.readUIntBE(offset, byteLength[, noAssert]) buf.readUIntLE(offset, byteLength[, noAssert]) offset ...
- BZOJ 3916 [Baltic2014]friends
[题解] 暴力枚举添加字符的位置,然后判断去掉这个位置的字符串是否有由两个相同的串拼接而成.本题的n的范围为200W,暴力判断会TLE,所以要使用哈希. #include<cstdio> ...
- PAT 1138 Postorder Traversal
Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...
- 基于XML文档的声明式事务配置
<!-- 配置事务切面 --> <aop:config> <aop:pointcut expression="execution(* com.atguigu.t ...