Android Dex文件详解

应用于加固技术中的DEX文件格式解析 安全圈的朋友们,对于DEX文件应该是比较了解的。我们这次就简单介绍一下吧:DEX文件(Dalvik Executable)是一种专为Android 操作系统设计的可执行文件格式。DEX文件包含了由 Java 语言编写的程序的字节码,这些程序在运行时被 Dalvik 虚拟机(DVM)解释执行。在 Android 应用程序开发中,Java 代码经过编译器编译生成Java字节码文件(.class文件),然后通过工具将字节码文件转换为DEX格式,最后打包成APK文件供安装和运行。 阅读详情

前言

相信大家都熟悉dex文件,把一个apk给解压缩,就会得到一堆dex文件,但是这些dex文件是怎么来的,又有什么用,为什么这样设计,有进行思考过吗

俗话说知其然,知其所以然,本篇文章开始探究一下这些底层实现细节。

正文

不同的虚拟机

JVM

JVM是Java Virtual Machine的简称,即Java虚拟机,它本质是一层软件抽象,在这之上才可以运行Java程序。Java文件经过编译后会生成JVM字节码,和C语言编译后生成的汇编语言不同,C编译成的汇编语言可以直接在硬件上跑,但是Java编译生成的字节码是在JVM上跑,需要由JVM把字节码翻译成机器指令。

也是由于这个JVM在操作系统上屏蔽了底层实现的差异,从而有了Java的跨平台特性。

DVM

DVM是Dalvik Virtual Machine的简称,是Android4.4及以前使用的虚拟机,所有Android程序都运行在Android系统进程中,每个进程对应着一个Dalvik虚拟机实例。

JVM和DVM都提供了对对象生命周期管理,堆栈管理,安全和异常管理及垃圾回收等重要功能。

但是DVM却不能和JVM一样能直接运行Java字节码,它只能运行.dex文件,而这个.dex文件则是由Java字节码通过Android的dx工具生成的文件。

ART

ART是Android Runtime,在Android5.0开始使用ART虚拟机来替代Dalvik虚拟机,为什么Google要换Android程序运行的虚拟机呢 因为ART虚拟机更优秀。

前面说了Dalvik虚拟机会在APP打开时去运行.dex文件,而这个是实时的,也就是JIT特性(Just In Time),这也就会导致在启动APP时会先将.dex文件转换成机器码,这就导致了APP启动慢的问题。

而ART虚拟机有个很好的特性叫做AOT(ahead of time),这个特性可以在安装APK的时候将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,而且ART虚拟机天生支持多dex,所以ART虚拟机可以很大提升APP的冷启动速度。

除了这个优点外,ART还提升了GC速度,提供功能更全面的Debug特性,但是缺点也就是APK安装速度慢,占用的空间多。

生成和查看dex文件

前面说了dex文件是给Android手机的虚拟机来使用的,所以我们来看看如何生成和查看一个dex文件。

先编写一个简单的.java文件:

public class HelloWorld {  
    int a = 0;  
    static String b = "HelloDalvik";  
  
    public int getNumber(int i, int j) {  
        int e = 3;  
        return e + i + j;  
    }  
  
    public static void main(String[] args) {  
        int c = 1;  
        int d = 2;  
        HelloWorld helloWorld = new HelloWorld();  
        String sayNumber = String.valueOf(helloWorld.getNumber(c, d));  
        System.out.println("HelloDex!" + sayNumber);  
    }  
} 

然后使用javac命令来编译.java文件为.class,注意这里必须使用Java 8,而不能使用Java 11,如下图专门使用Java 8编译的结果(原来Windows环境变量是Java 11,后续的dex解析有误):

image.png

有了.class文件后,就是Android的dx工具,该工具一般在下面目录:

//也就是sdk目录下的build-tools文件夹中
D:\Users\wayee\AppData\Local\Android\sdk\build-tools\30.0.3\dx.bat 

使用dx工具对.class文件进行处理:

image.png

然后会生成一个.dex文件,直接打开这个dex文件它是十六进制编码的文件,看不出任何有用信息,这时就需要一个专门来看这个的工具,这里推荐使用 010 Editor 这个工具,直接把.dex文件拖入工具:

image.png

注意这里选择的模板就是DEX.bt,然后就可以按照DEX的格式来分析这些字节是什么意思了,所以看懂dex文件必须要了解DEX文件的格式。

Dex文件格式

看到这里就必须要清楚一个基本概念了,也就是平时使用Java编写的文件,这里给编译打包成dex文件,那这个dex文件就必须要包含这个Java文件的所有信息,那是按照Java文件顺序一行一行保存为字节码还是其他什么方式呢

所以想知道编译器是如何在编译Java文件后保存信息的,就必须要清楚Dex文件格式。

我们可以直接在刚刚010 Editor软件中看到Dex.bt即Dex文件的格式,其格式如下:

当然也可以去Android源码官网看一下Dex的格式:

看了上面dex文件的格式,其大致可以分为3个区域,分别是文件头、索引区和数据区,那我们就来挨个分析这几个区域有什么作用,以及是如何保存编译后的Java文件。

header 文件头

头文件它包含了这个dex文件的几乎所有信息,所以它的信息非常多,其格式如下:

image.png

然后这时就直接点击010 Editor下面的dex_header部分:

image.png

其中上面的红框就是文件头的数据,而下面的红框就是文件头的格式,我们来挨个分析一下。

1、Magic value,即魔数,这个就是用来失败dex这种文件的,可以判断当前的dex文件是否有效,其值是固定死的:

image.png

转换成ASCII也就是dex.035, 所以凡是dex文件都是这个开头,否则就是错误的dex文件。

2、checksum,dex文件的校验和,它可以判断dex文件是否损坏或者篡改,占用4个字节,注意这里是采用小字节序的编码方式,即低位上存储的就是低字节内容,可以看一下:

image.png

会发现这里的值和二进制保存是相反的。

3、SHA1签名,也就是把整个dex文件用SHA-1签名得到的一个值,占用20个字节。

4、fileSize,整个文件的大小,占用4个字节,看一下值这里是:

image.png

十进制是1204,换算成16进制就是4B4,我们再来看看这个dex文件的长度:

image.png 这里长度也是4B4。

5、headerSize,表示头结构的大小,占用4个字节,这个就不截图看了。

6、endian_tag,表示字节序,这里具体的值就2个,标准的.dex格式采用小段字节序,但具体实现可能会选择执行字节交换,所以这个改变就由这个tag来判断。

7、linkSize和linkOff,这2个字段指定了链接段的大小和文件偏移,通常情况下他们都是0,linkSize为0表示为静态链接。

从这里开始就会发现有off这个字段,这是啥意思呢,其实也就是文件偏移量,也就是从这个文件第多少位置开始表示的值。

8、mapOff,这个字段表示DexMapList的文件偏移,这里我们先不多介绍,后面再说,这里值是:

image.png

换成16进制就是414h。

9、stringIdsSize和stringIdsOff,这2个字段指定了dex文件中所有用到的字符串的个数和位置偏移,注意这里指的是位置偏移,而不是真正的字符串值。

我们来看看size是多少:

image.png

会发现一共有28个字符串,而其值的偏移从112开始,而这个112是不是有点熟悉,112是整个dex头的大小,也就说明在头部之后第一部分就是字符串索引,这里之所以叫做索引也很合理,从112开始的n个字节保存的是程序用到的字符串的偏移量,注意这里不是字符串,只是各个字符串的偏移量。

这时你可能会疑惑,这28个字符串的偏移量该如何存放以及值是多少,我们完全不用担心,还是打开010 Editor软件,选中数据结构是dex_string_ids即可:

image.png

会发现从70h开始,开始保存的每个字符串的偏移量,而这个偏移量对应的就是最后面部分的值,我们还是拿第一个字符串来说:

image.png

会发现这里的偏移量,我们转到偏移量会发现:

image.png

这里是用了10个字节来保存了一个字符串,这个字符串是"clinit",我们暂时不考虑这个字符串是啥意思,这里采用了一种叫做uleb的数据结构,来动态保存字符串长度,这里我们暂时不考虑细节。

其实从这个字符串保存的方法来看,我们已经能大概看出是如何保存的了。首先在头部保存字符串大小,以及字符串索引的偏移量,然后再遍历索引找到每个字符串。

比如上面我们的代码,在这里保存的字符串是如下:

image.png

10、typeIds和typeIdsOff,有了上面字符串保存的逻辑,这个就是类的类型的数量和位置偏移,也都是占用4个字节,我们还是来看看值:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kW77mc6C-1653642835067)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0b0eb703dded4459a2e3a9b282327f8f~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image?)]

一共用到了9个类型,但是注意这里就没必要像保存字符串一样了,记录每个类型的偏移量,再去偏移的地方取值,这里类型的描述符已经在前面字符串变量中都进行描述过了,所以这里保存的是字符串的索引,我们来看看:

image.png

找到上面对应的偏移位置,我们发现第一个类型值是0x5,然后我们再去前面的字符串索引找到下标为5的字符串:

image.png

会发现这里的值是I,也就是第一个类型,依次类推,所有的类型如下:

image.png

会发现这几个类型的字符串描述在前面字符串列表中都保存过了,这样设计也可以减小查询操作、节省内存。

11、protoIdSize和protoIdOff,这个表示的是方法原型的个数和位置偏移,会发现上面dex文件中有7个方法原型,这里图就不截了,来看一下这7个方法原型都保存了哪些数据:

image.png

其实不难理解,想表示一个方法原型不外乎就是方法名、返回值和参数,其中参数可能是多个,所以会有多个类型索引,这里具体的数据结构就不细说了,大体意思理解即可,来看看7个方法原型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9aNGJ56-1653642835081)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0de94620959b4b9e92178e7999594b2b~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image?)]

这里的方法也就是前面java文件中有使用到的。

12、fieldSize和fieldOff,这2个字段就比较简单了,表示java文件中字段的信息,从头部数据结构中会发现有3个字段,我们直接看一下字段索引的数据:

image.png

会发现到这里时,信息表示就变的简单了,因为你想表示一个字段,不外乎就是类型、其类的类型、以及自己描述的字符串,而由于前面我们已经得到了字符串索引和类型索引,所以这里数据结构中的值直接使用前面定义过的索引即可。

还是看一下定义的所有字段的值:

image.png

13、methodSize和methodOff,这2个字段就比较熟悉了,表示了方法,而方法的表示也是需要几个要点,比如方法所在的类、方法的声明以及方法名,而类在之前类型索引定义过了,方法声明也声明过了,以及方法名也就是之前定义的字符串索引,所以这里我们就不细看其数据结构了,直接看一下我们前面写的java文件有多少个方法:

image.png

这里一共有10个方法。

14、classDefsSize和classDefsOff,这2个字段表示类定义的相关信息,类的信息就比较多了,包括类的修饰符、父类、接口、注解、静态元素等等,我们也还是通过010 Editor来看一下class都保存了哪些信息:

image.png

可以发现还是有不少信息的。

到这里我们基本就可以把一个类的信息都整清楚了,我们使用一张图来表示:

image.png

上图虽然只是表示了文件头的信息,但是我们知道有了这些文件头的信息,根据偏移量便可以获取到其保存的值。

Dex文件格式总结

看了文件头的定义,并且明白其值的意义,便也就熟悉了整个Dex格式的保存原理,我们这里看一张图:

image.png

这里除了文件头还有索引区和数据区,其中索引区的偏移量已经在文件头中定义,而数据区则保存着类的定义以及索引区中的数据,而最下面的链接数据区则是一些静态库或者动态库的链接。

总结

本篇内容有点多,但是还是很好理解的,首先就是虚拟机,在Android系统的虚拟机需要读取dex文件,而这个dex文件是由我们编写的.java文件编译而来,所以dex文件应当保存.java文件的所有信息。

而保存这些信息的方法就像是文件头保存大致地址,索引区保存具体地址,数据区是真的地方,通过这种方式就可以完整的保存一个java文件的信息。

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的直接点击文末小卡片可以领取哦!我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

领取地址:

在这里插入图片描述

DEX文件解析---1、dex文件头解析 DEX文件解析---1、dex文件头解析一、dex文件二、dex文件头各字段解析三、dex文件头代码解析示例(python)四、dex文件头解析实现代码(python实现)五、相关链接 一、dex文件     dex文件是Android平台上可执行文件的一种文件类型。它的文件格式可以下面这张图概括:     dex文件头一般固定为0x70个字节大小,包含标志、版本号、校验码、sha-1签名以及其... 阅读详情

相关推荐

dex文件介绍

搭建环境 Ubuntu 18.04.1 LTS android-ndk-r17-beta2 FFmpeg 4.0.2 编译FFmpeg 修改configure 配置编译脚本 报错调整 错误1: 错误2: 错误3: 错误4: 错误5: 搭建环境 Ubuntu 18.04.1 LTS 需要安装yasm:sudo apt-get install yasm and...

喜马拉雅 1922

Android Dex 文件解析

Android Dex 文件解析 文章目录Android Dex 文件解析前言基本数据类型LEB128 类型uleb128leb128uleb128p1Dex 文件结构图Dex 结构说明hedaer_itemstring_idstype_idsproto_idsfield_idsmethod_idsclass_defscall_site_idsmap_listtype_listclass_data_itemcode_itemdebug_info_itemDex 文件解析构建 Dex 文件执行 Dex 文件解

l0neman 的博客 5285

Android逆向工程:Dex 文件格式解析详解

本文详细解析了Android DEX文件格式,主要内容包括: DEX文件是Android虚拟机的可执行文件,由.class文件通过dx/d8编译器生成 介绍了DEX文件中的基本数据类型,包括有/无符号的byte、short、int、long以及LEB128可变长度编码 重点讲解了三种LEB128编码: uleb128(无符号) sleb128(有符号) uleb128p1(uleb128值加1) 展示了DEX文件整体结构图,包含header、字符串ID、类型ID、方法原型ID、字段ID、方法ID、类定义等部

无方少年游 2274

打开DEX文件

APP解析 .apk文件改为.zip文件 解压。 下载dex2jar软件 解压下载的文件 将 APK解压出来的文件夹下的 classes.dex 文件复制到 解压下的dex2jar文件下. 在dex2jar文件夹目录处输入cmd 复制“d2j-dex2jar.bat classes.dex” 右键粘贴 会生成一个.jar文件 下载jd-gui软件 解压后打开软件 拖入.jar文件 根据不同的代码写出的软件,文件内容不同。 手机端下载MT管理器app 左上角三条杠-------安装包提取-------定位

weixin_46601305的博客 3万+

Android高级进阶__class & dex文件详解

本章概述: -class文件结构深入解析 -dex文件结构深入解析 -class与dex文件对比 -基本概念: class文件就是一种文件格式,被JVM识别。如下图 java、scala、python等语言都可以编译生成class文件,让jvm识别 如何生成class文件: 1、通过IDE自动帮我们build 2、手动通过javac去生成class文件 3、通过java命令去执行class文件 ...

weixin_39079048的博客 1917

Android运行时文件详解:DEX、ODEX、OAT、VDEX、ART演进与排查实践

在Android应用开发与逆向工程中,DEX、ODEX、OAT、VDEX、ART是绕不开的核心文件。从Dalvik虚拟机到ART运行时,Android的编译与缓存机制经历了多代演进:DEX是应用字节码的通用载体,ODEX是Dalvik时代的预优化产物,OAT承载AOT机器码与内嵌DEX,VDEX存放已验证的DEX副本与校验信息,ART镜像则通过堆快照加速系统启动。这些文件不仅决定了应用的安装速度、冷启动性能,也直接影响崩溃排查、插件化改造和脱壳逆向的方法。掌握它们的格式特征、生成逻辑与相互关联,能够帮助开发

weixin_29698641的博客 302

Android动态加载Dex文件及DexClassLoader详解

ClassLoader “类加载器”(ClassLoader),顾名思义,就是用来动态加载class文件的。 ClassLoader作用主要有三个: 负责将 Class 加载到 JVM 中 审查每个类由谁加载(父优先的等级加载机制) 将 Class 字节码重新解析成 JVM 统一要求的对象格式 有兴趣的小伙伴可以看看JVM是如何加载一个类的 类的加载机制 ClassLoader(Java) Class clz = Classloader.loadClass(类全名),其实就是通过一个类的全名,生成这.

你的外祖父的博客 1万+

Android Dex文件生成流程详解

Android Dex文件生成的流程涉及将Java字节码文件转换为Dex文件,并在Android应用程序中使用Dex文件。如有其他问题,请随时助。这样,我们就完成了Android Dex文件的生成流程,并在Android应用程序中使用生成的Dex文件。以上代码示例中,我们指定了输入路径(Java字节码文件的路径)和输出路径(Dex文件的路径)。通过加载Dex文件的类和实例化对象后,我们可以调用Dex文件中定义的方法,如示例中的。方法时,会将Java字节码文件转换为Dex文件,并将其保存到指定的输出路径。

2301_79331387的博客 591

Dex文件格式详解资源:深入解析Android底层执行秘密

Dex文件格式详解资源:深入解析Android底层执行秘密 去发现同类优质开源项目:https://gitcode.com/ 随着移动设备的普及,Android系统已成为全球最流行的操作系统之一。而Dex(Dalvik Executable)文件作为Android应用的核心组成部分,对于开发者而言,理解和掌握其格式至关重要。本文将为您详细介绍一个开源项目——Dex文件格式详解资源,帮助您深入理解A...

gitblog_06708的博客 804

23. DEX_文件结构解析

因为有时 jadx 反编译不全、或要改字节码,直接看 DEX/Smali 能补上。:DEX 格式细节较多,入门阶段只要知道「有几块、各块在干啥」即可;,会讲 Smali 的类定义、方法、寄存器、常用指令,方便你直接读和改 Smali 代码。会输出 magic、checksum、fileSize、headerSize 等。,里面存的是 Java 类、方法、字段、字符串等编译后的结果。(字符串、类型、方法原型、方法、类定义等),最后是。(真正的方法字节码、常量等)。,表示 DEX 版本 038。

长沙火山 1015

新英格兰10机39节点matlab建模,ieee10机39节点系统数据

【实例简介】ieee10机39节点系统数据,主要是BPA数据!【实例截图】【核心代码】ne_039_bus└── ne_039_bus├── 039readme.doc├── bpa│ ├── 039bpa.dat│ ├── 039bpa.swi│ ├── LFerr.LIS│ ├── OneNote 目录.onetoc2│ └── STERR.LIS├── eurostag│...

weixin_39851809的博客 3273

android vdex 文件格式_Android安全–Dex文件格式详解

Dex文件是手机上类似Windows上的EXE文件,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。首先我们来生成一个Dex文件。新建文件Hello.java内容如下:class Hello{public static void main(String[] argc){System.out.println(“Hello!”);}}javac Hello.javadx –dex –outp...

weixin_39781452的博客 817

AWS RDS 介绍 三)创建 RDS 实例

AWS RDS 介绍 共分为 7 个部分, 其中 第 3部分重点介绍,如何创建一个RDS 实例。 三) AWS RDS 试用MySQL http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.

XuYongshi02的专栏 7645

Android ClassyShark终极指南:DexReader与DEX文件解析详解

Android ClassyShark是一款强大的独立二进制检查工具,专为Android开发者设计。它能够可靠地浏览任何Android可执行文件,并显示重要信息,如类接口和成员、dex计数和依赖关系。本文将深入解析ClassyShark中的DexReader组件,帮助您快速掌握DEX文件解析的核心技术。 ## 🔍 什么是DexReader? DexReader是ClassyShark项目中专

gitblog_01125的博客 726

S32DS IDE调试技巧:如何用条件断点精准捕获汽车电子MCU的硬件状态变化

本文详细介绍了S32DS IDE中条件断点功能在汽车电子MCU开发中的应用技巧。通过精准捕获硬件状态变化,工程师可以高效调试外设寄存器异常、时序敏感型交互等复杂场景,大幅提升汽车电子系统的开发效率。文章还提供了多种实战案例和性能优化建议,帮助开发者充分利用S32DS的调试功能。

CAT789的专栏 207

华为AR3260路由器NAT回流配置实战:从WEB界面到命令行的完整避坑指南

本文详细解析了华为AR3260路由器NAT回流(Hairpin NAT)的配置原理与实战方法。针对内网用户无法通过公网地址访问内部服务器的常见问题,文章不仅剖析了WEB界面配置的常见报错原因,更提供了清晰、可靠且一劳永逸的命令行(CLI)配置方案与排错指南,帮助企业网络工程师彻底解决内外网访问不一致的难题。

u6v7w8x的博客 872

Android安全–Dex文件格式详解

转载自http://www.blogfshare.com/dex-format.htmlAloneMonkey 2015年7月25日 0 Dex文件是手机上类似Windows上的EXE文件,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。首先我们来生成一个Dex文件。新建文件Hello.java内容如下:class Hello{ public static void main(

joye123的博客 1448

深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践

CMSIS-NN是ARM为Cortex-M系列微控制器设计的神经网络库。它旨在提供一套高效、轻量级的神经网络API,使得开发者可以在资源受限的微控制器上运行深度学习模型。CMSIS-NN优化了各种常见的神经网络层,如卷积层、全连接层等,确保它们在微控制器上的运行效率。# 定义模型])# 编译模型# 训练模型这样,我们就得到了一个简单的手写数字识别模型。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧,请下载完整项目。

m0_57781768的博客 5882

android逆向日记-Dex文件格式详解

很长时间了,一直想对自己的app做加密方面的工作,也看了许多大神的文章,深知这里面坑很多,得一个个去踩。这篇文章就算是个入门日记吧。 我们知道apk实际上就是个压缩包,解压后可获得dex文件。https://source.android.com/devices/tech/dalvik/dex-format.html 内容都是从官方文档上获取来的,但文档并不容易看的明白。所以写了这篇日记辅助理解,

pxr1989104的博客 3655

解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

Hern(宋兆恒) 39万+

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 381

Android 底层风暴:Dex 文件格式详解与增量更新原理

增量更新(Incremental Update)是一种软件更新策略,只下载和安装应用程序的变更部分,而不是整个应用程序。这种方法可以显著减少下载时间和数据使用量。bsdiff(Binary diff)是一种高效的二进制差异算法,专门用于生成两个二进制文件之间的差异补丁。它基于后缀数组和最长公共子序列算法,能够生成最小的差异补丁。

allk55的博客 1099

【WRF模拟】土地利用类型的确定:最大覆盖法/瓦片法

土地利用类型的确定:最大覆盖法/瓦片法

WW、forever的博客 1529

IDA Pro idadex 模块详解:用 IDAPython 解析 Android DEX(Dalvik)文件

`idadex` 是 IDA Pro 内置于 IDAPython 环境中的 DEX(Dalvik Executable)文件解析工具模块,专门服务于 Android 逆向工程场景:当 IDA 加载 Android 二进制后,可以通过它在脚本中读取字符串、方法、字段、类型等 DEX 元数据,并在 DEX 索引与 IDA 地址之间自由转换。读完本文,你将掌握 `idadex` 的完整 API 面:核心

gitblog_00168的博客 250

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: Android Activity的创建流程(Android-10)
下一篇: Android Native 异常捕获库
网络安全-XG
博客等级 码龄5年 1万+粉丝 2752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值