1.什么是class文件

class文件就是可以被JVM识别,加载,运行的一种文件格式。一般情况下,它可以由java代码编译执行后得到,但是这并不是一定的,像kotlin,scala,python,ruby等JVM语言都可以通过编译得到class文件。

2.如何得到class文件

上面已经讲了,得到class文件不一定要使用java。这里我们只讨论使用java去生成class文件。一般情况下,我们都是通过Ecplise或者Intellij这样的IDE开发工具去build工程,当然也可以用个JDK中的javac命令去编译java文件。当我们一开始接触java时,老师也是这么教的。这里回顾下,前提pc已经有java环境了(安装了jdk,配置了环境变量)

写个简单java代码文件

public class HelloClass{ public static void main(String[] args){ System.out.println("Hello Class!"); } }

然后进入终端,通过javac命令编译这个文件

javac -target 1.6 -source 1.6 HelloClass.java

这是你就会在当前目录下看到一个HelloClass.class的文件,这就是我们的目标。就这么简单...

3.class文件的结构

class文件记录着整一个类的所有信息,是所有!

class文件结构的3个特点:

是一种8位字节的二进制流文件

各个数据按顺序紧密的排列,无间隙

每个类或者借口都单独占据一个class文件

QQ截图20170610093949.png

上面就是完整的class文件的结构,是不是看晕了...

magic 加密字段

minor_version 支持最低版本的jdk

major_version 编译使用的jdk版本

constant_pool_count 常量池的数量

cp_info constant_pool 常量池的结构体,数量不定

access_flags 访问级别

this_class 当前类

super_class 父类

interfaces_count 类实现接口的数量

fields_count 类成员变量的数量

methods_count 类方法的数量

method_info methods 类方法的结构体

attributes_count 类属性的数量

attribute_info attributes 类属性的结构体

4.什么dex文件

dex文件就是可以被android虚拟机dvm识别,加载,运行的文件格式。

5.如何生成dex文件

一般情况下,我们都是通过IDE的build工具生成,当然我们也可以手动编译生成。所需要用到的命令在android sdk路径下的build-tools\25.0.2(任意版本)\dx,我们现在的目标是要将HelloClass.class这个文件打包成dex文件

dx --dex --output HelloClass.dex HelloClass.class

然后,你就可以在当前目录下看到一个叫HelloClass.dex的文件,so easy!

6.运行dex文件

因为dex文件是运行在android dalvik虚拟机上的,所以我们要先将dex文件push到手机中,具体步骤如下:

adb push HelloClass.dex /sdcard/ adb shell 127|root@vbox86p:/sdcard # dalvikvm -cp HelloClass.dex HelloClass

然后就能看到Hello Class!的打印了,跟我们在pc上运行一模一样

7.dex文件的结构

一种8位字节的二进制流文件

各个数据按顺序紧密排列,无间隙

整个应用所有java源文件都放在一个dex文件中(一般情况下)

Paste_Image.png

上面就是完整的dex文件的结构,我们可以把dex的文件结构分成3个区。

第一个区是header,包括header_item dex_header这个结构体,第二个区是索引区,包括string_id_list dex_string_ids(字符串索引),type_id_list dex_type_ids(类型索引),proto_id_list dex_proto_ids(方法原型索引),field_id_list dex_field_ids(域索引),method_id_list dex_method_ids(方法索引),第三个区是数据区,包括

class_def_item_list dex_class_defs(类的定义),data(图中的value),link_data(so)

8.class文件和dex文件的对比#

两者本质上是一致的,dex文件也是从class文件演变而来的,个人感觉像是打包一样,当然不止如此。dex文件比class文件的优势是去除了class文件结构中冗余的设计,更加精简,适合于运用在移动端。

java class dex_class文件与dex文件分析相关推荐

  1. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )

    文章目录 前言 一.打包 Jar 文件和 Dex 文件 1.示例代码 2.打包 Jar 文件 3.打包 Dex 文件 二.反编译 Dex 文件 三.分析 Dex 文件 1.Student 类相关信息 ...

  2. 【学习笔记】class文件与dex文件

    为什么dex文件比class文件更适合移动端? 首先说明移动端的局限性 文件结构 内存有限 安装包体积不宜太大 频繁I/O操作会带来卡顿 Class文件 将.class文件直接打开会看到其物理结构.一 ...

  3. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )

    文章目录 一.DEX 字节码文件准备 二.拷贝 Assets 目录下的 classes2.dex 字节码文件到内置存储区 三.在 AndroidManifest.xml 清单文件中配置组件 四.启动 ...

  4. java上传ddi_Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用...

    前面的博客<Android平台dalvik模式下java Hook框架 ddi 的分析(1)>中,已经分析了dalvik模式下 ddi 框架Hook java方法的原理和流程,这里来学习一 ...

  5. Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...

  6. 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )

    文章目录 一.解压 apk 文件 二.加密生成 dex 文件 三.打包未签名 apk 文件 四.完整代码示例 五.文件解压缩相关代码 六.执行结果 参考博客 : [Android 安全]DEX 加密 ...

  7. 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )

    文章目录 一.生成 dex 文件 二.生成 dex 文件代码示例 三.生成 dex 结果 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | apktool ...

  8. Android: .java文件转.dex和java字节码

    一..java文件转.dex 首先将 .java 文件转成 .class 文件(例如:Hello.java) javac Hello.java -> 得到Hello.class [这里有一个坑, ...

  9. Java文件是如何编译成Dex文件的?如何执行Dex文件?

    Dex文件介绍 Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件. 为什么要使用dex文件来存储呢? Java源码经过编 ...

最新文章

  1. javascript的date对象
  2. win7操作系统在哪显示隐藏文件夹
  3. 家庭财务管理系统c语言论文,《家庭财务管理系统》-毕业论文.doc
  4. matlab清除所有数据,清除仿真数据检查器中的所有数据
  5. GridControl详解(八)菜单
  6. python画图去掉边框
  7. Ubuntu软件安装
  8. Win10文件夹大小分析、磁盘空间清理工具
  9. 讲讲亿级PV的负载均衡架构
  10. java 包导入快捷键_Java导入包的快捷键
  11. FL计算机软件,FL Studio水果编曲软件
  12. 电工在计算机方面的应用,计算机在电工技术实验的应用
  13. greenplum数据迁移gpcopy
  14. mumu模拟器安装xposed
  15. THREE将左键改为平移右键改为旋转
  16. 毕业设计 单片机心率检测器设计与实现 - stm32
  17. 服务器cpu和磁盘规律毛刺问题排查
  18. IO流-常用的IO流总结
  19. 什么是人工智能技术?
  20. 基于STM32的照片查看器课程报告

热门文章

  1. google pixel 5 激活开发者模式
  2. NYU计算机系,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」
  3. zabbix监控软件介绍<一>
  4. 套料排版代码python_雕刻机排版下料套料软件,可生成G代码格式和DXF图形、木工下料...
  5. 【LeetCode 871】 Minimum Number of Refueling Stops
  6. respond.min.js/respond.js下载
  7. Java基础:01Java语言概述(常见的DOS命令,Java语言的特点、核心机制、环境搭建,HelloWorld,注释,Java API 文档)
  8. android telnet服务器端,Android FTP客户端实现、Telnet客户端
  9. SLAM大牛Cyrill 开源SuMa ++:基于语义激光雷达过滤动态物体提高定位精度
  10. lib/python3.7/site-packages/torch/lib/../../../../libgomp.so.1: version `GOMP_4.0‘ not found (requir