dexsql 文档 打开应用

DexSQL 表与视图参考

Markdown 源文件 · dexsql app

本文说明每个内置关系的一行代表什么、连接键、字段含义和可空性。日常分析优先使用已解析的视图;检查 DEX 结构时使用基础表。

? 表示可空列。Utf8、Utf8View 和字符串字典在 SQL 中都作为文本使用;Dynamic 可以容纳不同 SQL 值类型。索引以 file_id 为作用域,字符串除外,其键为 (string_pool_id, string_idx)。序号从 0 开始。_off 表示字节偏移,指令地址以 16 位 code unit 计量。

文本以原始 MUTF-8 存储,在输出边界解码,详见文本值。目录中的 Utf8 类型名表示 SQL 文本,不表示内部字节编码。

查看当前程序的 schema 可使用 dexsql tables --input app.apk 或 MCP 的 list_tables / describe_table。

选表指南

要查什么 用哪个关系
按 descriptor / 名字找类 classes
按 descriptor / 名字 / 参数找方法 methods
按 descriptor / 名字 / 类型找字段 fields
某个类自己声明的方法 class_methods
某个类自己声明的字段 class_fields
某个方法引用了哪些字符串常量 method_strings
谁调用了谁 method_calls
某个方法读写了哪些字段 method_field_accesses
某个方法引用了哪些类型 method_used_types
某个方法加载了哪些立即数 method_using_numbers
按字节码形状匹配方法 methods
谁携带了某个注解 annotation_elements_resolved
注解的嵌套值树 annotation_values
某个类实现了哪些 interface class_interfaces
某个原型的参数列表 proto_params
字符串常量池本身 strings

实体视图

types

一行是当前 dex 引用的一个类型(type_ids 的一项)。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
type_idx UInt32 type id 索引
descriptor Utf8 原始类型 descriptor,例如 Ljava/lang/String;、I、[B
java_name Utf8 更接近 Java 源码风格的类型名

protos

一行是当前 dex 引用的一个方法原型(proto_ids 的一项)。

参数按 DEX 顺序排列。无参数时 param_count = 0、param_descriptors = ''。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
proto_idx UInt32 proto id 索引
shorty_idx UInt32 shorty 字符串索引
shorty Utf8 dex shorty descriptor
return_type_idx UInt32 返回类型的 type_idx
return_descriptor Utf8 返回类型 descriptor
parameters_off UInt32 参数 type_list 偏移;0 表示没有列表
param_count UInt32 参数数量
param_descriptors Utf8 按 ordinal 顺序、以逗号连接的参数 descriptor

fields

一行是当前 dex 引用的一个字段(field_ids 的一项)。这是引用关系,不是定义关系——参见引用与定义;某个类自己声明的字段用 class_fields。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
field_idx UInt32 field id 索引
class_idx UInt32 字段所属类的 type_idx
class_descriptor Utf8 字段所属类 descriptor
type_idx UInt32 字段值类型的 type_idx
type_descriptor Utf8 字段值类型 descriptor
name Utf8 字段名
descriptor Utf8 完整字段 descriptor,形如 Lpkg/Cls;->field:I

methods

每行对应一个 DEX 引用的方法 ID,无论该 DEX 是否定义了这个方法。键为 (file_id, method_idx);同一 descriptor 可以在多个 DEX 中出现。

仅引用行的 access_flags、method_kind、opcode_count 和 opcode_hex 为 NULL:该 DEX 并未定义这个方法,其字节码(如有)在别的文件中。已定义但没有 code item 的方法(abstract 或 native)的 opcode_count = 0、opcode_hex = ''。方法定义见 class_methods。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 method id 索引
class_idx UInt32 方法所属类的 type_idx
class_descriptor Utf8View 方法所属类 descriptor
proto_idx UInt32 方法原型索引
name Utf8View 方法名
descriptor Utf8View 完整方法 descriptor,形如 Lpkg/Cls;->name(I)V
return_descriptor Utf8View 返回类型 descriptor
param_count UInt32 参数数量
param_descriptors Utf8View 按参数顺序、以逗号连接的参数 descriptor(与 protos.param_descriptors 形式相同)
access_flags UInt32? 方法访问标志;本 dex 只引用未定义该方法时为 NULL
opcode_count UInt32? 已解码指令数;本 dex 只引用该方法(此处没有 opcode 数据)时为 NULL。
opcode_hex Utf8View? 以空格分隔的两位十六进制 opcode;本 dex 只引用该方法时为 NULL。
method_kind Utf8? class data 中的方法分组,通常为 direct 或 virtual;未知时为 NULL

classes

每行对应一个类定义。只被引用的类型位于 types,不出现在此处。superclass_descriptor 和 source_file 可以为空。interface_count 是直接声明的接口数量,接口名称见 class_interfaces。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_def_idx UInt32 class def section 内的顺序索引
class_idx UInt32 当前类的 type id 索引
descriptor Utf8 当前类 descriptor
access_flags UInt32 类访问标志
superclass_descriptor Utf8? 父类 descriptor;无父类时为 NULL
interface_count UInt32 实现的 interface 数量(不实现任何 interface 时为 0,绝不为 NULL)
source_file Utf8? source file 名;无则为 NULL

引用与成员视图

method_strings

一行是一条引用字符串的指令:某个方法中的一处字符串常量。同一方法多次引用同一字符串会有多行。

字段 类型 含义
method Utf8View 指令所在方法的完整 descriptor。
method_class Utf8View 指令所在类的 descriptor。
method_name Utf8View 指令所在方法的名称。
value Utf8View 字符串文本;输出时解码为 UTF-8。
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 DEX 内的方法索引。
string_idx UInt32 DEX 字符串池中的字符串索引。

method_calls

每行对应一条方法调用指令。无前缀列描述调用方,callee* 列描述指令引用的目标。重复调用保留为多行,不自动展开 override 或运行时分派。查询写法见调用查询。

字段 类型 含义
method Utf8View 指令所在方法的完整 descriptor。
method_class Utf8View 指令所在类的 descriptor。
method_name Utf8View 指令所在方法的名称。
callee Utf8View 被引用方法的完整 descriptor。
callee_class Utf8View 被引用方法的类 descriptor。
callee_name Utf8View 被引用方法的名称。
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 DEX 内的方法索引。
callee_method_idx UInt32 调用方 DEX 中被引用方法的索引。

method_field_accesses

每行对应一条字段访问指令。using_type 使用小写:get 表示读取,put 表示写入。方法列标识访问方,字段列标识被引用的字段。

字段 类型 含义
method Utf8View 指令所在方法的完整 descriptor。
method_class Utf8View 指令所在类的 descriptor。
method_name Utf8View 指令所在方法的名称。
field Utf8View 被引用字段的完整 descriptor。
field_class Utf8View 字段声明类的 descriptor。
field_name Utf8View 字段名。
field_type Utf8View 字段类型 descriptor。
using_type Utf8? 字段读取为 get,写入为 put;其余为 NULL。
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 DEX 内的方法索引。
field_idx UInt32 field id 索引

method_used_types

一行是一条引用类型的指令(check-cast、new-instance 等)。

字段 类型 含义
method Utf8View 指令所在方法的完整 descriptor。
method_class Utf8View 指令所在类的 descriptor。
method_name Utf8View 指令所在方法的名称。
type_descriptor Utf8View 被引用类型的 descriptor。
type_name Utf8View 被引用类型的 Java 风格名称。
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 DEX 内的方法索引。
type_idx UInt32 DEX 内的 type 索引。

method_using_numbers

每行对应一条加载数值立即量的指令。long_value 保存符号扩展的整数或浮点原始位;double_value 保存数值形式的浮点值,byte/short 常量对应 NULL。

字段 类型 含义
method Utf8View 指令所在方法的完整 descriptor。
method_class Utf8View 指令所在类的 descriptor。
method_name Utf8View 指令所在方法的名称。
number_type Dictionary(Int8, Utf8) 数值类型,例如 byte、short、int、long、float、double
long_value Int64 整数值(符号扩展),或 float/double 的原始位模式
double_value Float64? 浮点值;byte/short 为 NULL
opcode UInt32 原始 debug opcode 数值
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 DEX 内的方法索引。

proto_params

一行是某个原型的一个参数。与 protos.param_descriptors 是同一份数据的两种形态:这里一个参数一行,那里拼成一个字符串。

字段 类型 含义
file_id UInt32 所属逻辑 DEX 文件编号。
proto_idx UInt32 DEX 内的方法原型索引。
ordinal UInt32 父结构内从 0 开始的位置。
type_idx UInt32 DEX 内的 type 索引。
descriptor Utf8 原始类型 descriptor,例如 Ljava/lang/String;、I、[B

class_methods

每行对应 class data 中的一个方法定义,键为 (file_id, method_idx)。包含 direct、virtual 方法以及 abstract/native 声明。更多原型和 opcode 字段可通过相同键在 methods 中读取。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 所属类索引
class_descriptor Utf8 所属类 descriptor
method_idx UInt32 method id 索引
method_name Utf8 方法名
method_descriptor Utf8 完整方法 descriptor
kind Utf8 方法分组,direct 或 virtual
access_flags UInt32 方法访问标志

class_interfaces

每行对应类或接口直接声明的一个接口关系,不展开继承得到的接口。未直接声明接口的类型在此处没有行。

字段 类型 含义
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
ordinal UInt32 父结构内从 0 开始的位置。
interface_type_idx UInt32 直接接口的 type 索引。
interface_descriptor Utf8 直接接口 descriptor。

annotation_elements_resolved

每行对应一个 owner、注解和顶层元素。没有元素的标记注解仍产生一行,元素列为 NULL。同一注解被多个 owner 共享时,会分别产生对应行。

retention_policy 将 visibility 0/1/2 映射为 class/runtime/system。owner_kind 为 class、field、method 或 parameter。嵌套元素见 annotation_values。

字段 类型 含义
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
owner_kind Dynamic class、field、method 或 parameter。
owner_idx UInt32 owner 索引,其索引域由 owner_kind 决定。
owner Utf8? 被注解的类、字段、方法或参数 owner 的 descriptor。
parameter_idx Dynamic? 参数 owner 的从 0 开始的位置;其他 owner 为 NULL。
annotation Utf8 注解类型 descriptor。
visibility UInt32 annotation visibility 原始数值(0 = build/class,1 = runtime,2 = system)
element_count UInt32 annotation element 数量
annotation_off UInt32 annotation item 偏移(连到 annotation_elements、以及指向它的那些 annotation set 的连接键)
element_ordinal UInt32? 顶层元素位置;标记注解为 NULL。
element_name Utf8? 顶层元素名称;标记注解为 NULL。
value_kind Utf8? 可读编码值类型
value_index UInt32? 索引类值引用的 dex 索引——string 为 string_idx,type 与嵌套 annotation 自身类型为 type_idx,field/enum 为 field_idx,method 为 method_idx,method_type 为 proto_idx,method_handle 为 method_handle_idx;其余为 NULL
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值
retention_policy Dynamic? 根据 visibility 得到 class、runtime 或 system。

annotation_values

每行对应一个 owner 和任意嵌套深度的编码值节点。没有元素的标记注解不产生行。不含 owner 的值树位于 annotation_elements;节点字节范围和原始 value_index 引用也在该表。示例见注解查询。

字段 类型 含义
file_id UInt32 所属逻辑 DEX 文件编号。
class_idx UInt32 DEX 内声明类的 type 索引。
owner_kind Dynamic class / method / field / parameter
owner_idx UInt32 owner 索引,其索引域由 owner_kind 决定。
owner_descriptor Utf8? 被注解的 类 / 方法 / 字段 / 参数 的 descriptor
parameter_idx Dynamic? 参数 owner 的从 0 开始的位置;其他 owner 为 NULL。
annotation_off UInt32 annotation item 偏移(连到 annotation_elements、以及指向它的那些 annotation set 的连接键)
annotation_type_idx UInt32 根注解类型索引。
annotation_descriptor Utf8 根 annotation 类型的 descriptor
depth UInt32 相对根 annotation 的嵌套深度
ordinal UInt32 在父 element/数组内的顺序
name_idx UInt32? element 名称字符串索引;array 元素只有位置没有名字,为 NULL
name Utf8? 该值的 element 名称
value_kind Utf8 可读编码值类型
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值

字符串与注解

strings

每行对应一个字符串池条目,包括常量、名称和 descriptor。value 保留原始 MUTF-8,可直接用 WHERE value = '…' 或 WHERE value LIKE '%needle%' 过滤。

字段 类型 含义
string_pool_id UInt32 字符串池编号(DexSQL 分配);从 file_id 出发经 dex_files.string_pool_id 到达
string_idx UInt32 该池内的 string id 索引
value Utf8View 字符串文本;输出时解码为 UTF-8

class_fields

一行是一条字段定义(某个类的 class-data 成员)。这是 fields 的定义侧对应物,关系与 class_methods 之于 methods 相同——参见引用与定义。列名同样带 field_ 前缀:field_name / field_descriptor 对应 fields 的 name / descriptor。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 所属类索引
class_descriptor Utf8 所属类 descriptor
field_idx UInt32 field id 索引
field_name Utf8 字段名
field_descriptor Utf8 完整字段 descriptor
kind Utf8 字段分组,通常为 static 或 instance
access_flags UInt32 字段访问标志

annotations

每行对应一个 DEX annotation_item,唯一键为 (file_id, annotation_off)。表本身不带 owner 列,多个 owner 可以通过注解集合引用同一项。owner 关系见注解视图,值见 annotation_elements。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_off UInt32 annotation item 偏移(连到 annotation_elements、以及指向它的那些 annotation set 的连接键)
visibility UInt32 annotation visibility 原始数值(0 = build/class,1 = runtime,2 = system)
type_idx UInt32 annotation 类型索引(types.type_idx)
element_count UInt32 annotation element 数量

annotation_elements

每行对应一个编码值节点,唯一键为 (file_id, annotation_off, value_off)。depth = 0 表示顶层元素。直接子节点的深度增加 1,字节范围位于父节点的 [value_off, value_end_off) 内。共享注解项在此只保存一份。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_off UInt32 所属 annotation item 偏移(连到 annotations 的连接键)
depth UInt32 嵌套深度;0 为 annotation item 声明的 element
ordinal UInt32 同深度兄弟节点中的位置
name_idx UInt32? element 名称字符串索引;array 元素只有位置没有名字,为 NULL
value_off UInt32 该值字节的起始偏移
value_end_off UInt32 该值最后一个字节之后的偏移
value_kind Utf8 可读值类型
value_index UInt32? 索引类值引用的 dex 索引——string 为 string_idx,type 与嵌套 annotation 自身类型为 type_idx,field/enum 为 field_idx,method 为 method_idx,method_type 为 proto_idx,method_handle 为 method_handle_idx;其余为 NULL
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值

DEX 文件布局

dex_files

每个逻辑 dex 一行。APK/ZIP 中每个 classes*.dex 都会成为独立行;DEX 041 容器里的每个逻辑 dex 也各占一行。

字段 类型 含义
file_id UInt32 DexSQL 分配的 dex 文件编号
string_pool_id UInt32 本 dex 解析 string_idx 所用的字符串池。041 以下就是本 dex 自己的池;041 容器内多个逻辑 dex 共享同一个
source_path Utf8 输入的来源名,通常是原始路径或内存输入的标签;不一定是文件系统路径
entry_name Utf8 APK/ZIP 内的 dex entry 名;直接输入 dex 时为对应输入条目名。041 容器例外:同一个物理条目里的多个逻辑 dex 会被命名为 classes.dex、classes.dex#2……那些带 #N 的 zip 条目并不存在,是合成的
byte_len UInt64 实际载入的 dex 字节数
dex_version Utf8 dex header 中的版本号字符串,例如 035、038
checksum UInt32 dex header 的 Adler-32 checksum
signature_hex Utf8 dex header 的 SHA-1 signature,十六进制文本
file_size UInt32 header 声明的 dex 文件大小
header_size UInt32 header 大小
endian_tag UInt32 dex endian tag
link_size UInt32 link section 大小
link_off UInt32 link section 偏移
map_off UInt32 map_list 偏移
string_count UInt32 string id 数量
string_ids_off UInt32 string id section 偏移
type_count UInt32 type id 数量
type_ids_off UInt32 type id section 偏移
proto_count UInt32 proto id 数量
proto_ids_off UInt32 proto id section 偏移
field_count UInt32 field id 数量
field_ids_off UInt32 field id section 偏移
method_count UInt32 method id 数量
method_ids_off UInt32 method id section 偏移
class_count UInt32 class def 数量
class_defs_off UInt32 class def section 偏移
data_size UInt32 data section 大小
data_off UInt32 data section 偏移

map_items

暴露 dex map_list。它描述当前 dex 内各 section 的类型、大小和起始偏移。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
ordinal UInt32 当前 map item 在 map_list 中的顺序
type_code UInt32 dex map item 的原始 type code
size UInt32 该 section 中 item 的数量
offset UInt32 该 section 的文件偏移

id_items

统一暴露各类 id section 的原始 item 偏移。适合做底层布局检查。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
item_type_code UInt32 id item 所属 section 的 dex type code
idx UInt32 该 section 内的索引
item_off UInt32 id item 自身的起始偏移
item_end_off UInt32 id item 自身的结束偏移
data_off UInt32? id item 指向 data 区结构时的目标偏移;没有目标结构时为 NULL

索引与类数据

type_ids

原始 type_ids 段:每个类型一行,只存其 descriptor 的 string id。可读的 types 视图基于这张表。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
type_idx UInt32 type id 索引
descriptor_idx UInt32 该类型 descriptor 的 string_idx

type_lists

原始 type_list 结构的摘要。proto 参数列表和 class interface 列表都会引用它。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
type_list_off UInt32 type_list 起始偏移
type_list_end_off UInt32 type_list 结束偏移
size UInt32 该列表中的类型数量

type_list_entries

把每个 type_list 拆成逐项行。

列表按偏移共享,方法原型参数和类接口可以引用同一份列表。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
type_list_off UInt32 所属 type_list 起始偏移
ordinal UInt32 类型在列表中的顺序
type_idx UInt32 指向 types.type_idx 的类型索引

proto_ids

原始 DEX proto_id_item 行。可读文本与参数聚合位于 protos 视图。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
proto_idx UInt32 proto id 索引
shorty_idx UInt32 shorty 字符串索引
return_type_idx UInt32 返回类型的 type_idx
parameters_off UInt32 参数 type_list 偏移;0 表示没有列表

field_ids

原始 field_ids 段:每个 field id 一行,只存 DEX 实际保存的三个索引。可读的 fields 视图基于这张表。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
field_idx UInt32 field id 索引
class_idx UInt32 字段所属类的 type_idx
type_idx UInt32 字段值类型的 type_idx
name_idx UInt32 字段名的 string_idx

method_ids

原始 method_ids 段:每个 method id 一行,只存 DEX 实际保存的三个索引。可读的 methods 视图基于这张表。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 method id 索引(稠密,按段内顺序)
class_idx UInt32 声明类的 type_idx
proto_idx UInt32 原型索引(protos.proto_idx)
name_idx UInt32 方法名的 string id

class_defs

原始 class_def_item 记录——只有 DEX 索引,每个已声明的类一行,按 class-def 记录顺序排列。这些索引的 可读名称见 classes 视图;这里保留的是寻址该类其它结构所需的 offset。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_def_idx UInt32 class def section 内的顺序索引
class_idx UInt32 当前类的 type id 索引
access_flags UInt32 类访问标志
superclass_idx UInt32? 父类的 type id 索引;NO_INDEX 时为 NULL
interfaces_off UInt32 interface type_list 的 offset;不实现任何 interface 时为 0
source_file_idx UInt32? source file 名的 string id 索引;NO_INDEX 时为 NULL
annotations_off UInt32 annotations_directory_item 的 offset;无则为 0
class_data_off UInt32 class_data_item 的 offset;类不声明成员时为 0
static_values_off UInt32 静态字段初值 encoded_array_item 的 offset;无则为 0

class_data_items

类 class_data_item 摘要,记录字段和方法分组数量及字节范围。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 所属类索引
class_data_off UInt32 class data 起始偏移
class_data_end_off UInt32 class data 结束偏移
static_fields_size UInt32 static field 数量
instance_fields_size UInt32 instance field 数量
direct_methods_size UInt32 direct method 数量
virtual_methods_size UInt32 virtual method 数量

class_data_methods

一行是 class-data 中的一条方法定义,带访问标志和它所属的编码列表(direct / virtual)。本 dex 只引用而未定义的 method_id 在这里没有行——这就是 methods.access_flags 与 methods.method_kind 可空的来源,参见引用与定义。带类和方法名的可读形式用 class_methods 视图。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 声明类的 type_idx
method_idx UInt32 method id 索引(method_ids.method_idx)
access_flags UInt32? 方法访问标志
kind Utf8? 该记录所在的编码列表——direct 或 virtual

class_static_values

类静态字段初始值。它把 static_values_off encoded array 按顺序映射回静态字段。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 所属类索引
static_values_off UInt32 static values encoded array 偏移
ordinal UInt32 静态初始值顺序
field_idx UInt32? 对应 static field 的 field id 索引;无法映射时为 NULL
value_kind Utf8 可读值类型
value_index UInt32? 索引类值所引用的 dex 索引,按 value_kind 解释——与 encoded_array_values.value_index 完全一致;其它情况为 NULL
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值

方法句柄与调用点

method_handles

DEX 038+ 的 method_handle_item 表:handle 类型 + 它寻址的成员索引。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_handle_idx UInt32 method handle 索引
method_handle_type UInt32 原始 method handle type 数值
member_idx UInt32 目标 field id 或 method id 索引,由 method_handle_type 决定属于哪一侧

call_sites

DEX 038+ 的 call_site_id_item 摘要,解析 invoke-custom 的 bootstrap 信息。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
call_site_idx UInt32 call site 索引
call_site_off UInt32 call site encoded array 偏移
value_count UInt32 call site encoded array 中的 encoded value 总数
method_handle_idx UInt32? bootstrap method handle 索引;不存在或格式不匹配时为 NULL
method_name_idx UInt32? 调用点方法名字符串索引
proto_idx UInt32? 调用点方法原型索引

call_site_args

把 call site encoded array 的每个 encoded value 拆成逐项行。

这里只列顶层值。嵌套值树位于 encoded_array_values,其 encoded_array_off = call_site_off。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
call_site_idx UInt32 所属 call site 索引
call_site_off UInt32 所属 call site encoded array 偏移
ordinal UInt32 参数在 encoded array 中的顺序
value_kind Utf8 可读值类型,例如 string、method_type、int
value_index UInt32? 该值引用的索引,按 value_kind 解释:string→strings.string_idx,type/annotation→type_ids.type_idx,field/enum→field_idx,method→method_idx,method_type→proto_idx,method_handle→method_handle_idx
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值

编码值

encoded_arrays

所有已发现的 encoded_array_item 摘要。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
encoded_array_idx UInt32 DexSQL 给 encoded array 分配的顺序编号
encoded_array_off UInt32 encoded array 起始偏移
encoded_array_end_off UInt32 encoded array 结束偏移
value_count UInt32 顶层 encoded value 数量

encoded_array_values

每行对应编码数组中的一个值节点。depth = 0 表示顶层项;深度和字节范围包含关系描述嵌套数组及注解。引用名称按 value_kind 指定的索引域解析。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
encoded_array_off UInt32 顶层 encoded array 起始偏移
depth UInt32 嵌套深度,顶层为 0
ordinal UInt32 当前层内的值顺序
name_idx UInt32? annotation element 名称字符串索引;非 annotation element 时为 NULL
value_off UInt32 encoded value 起始偏移
value_end_off UInt32 encoded value 结束偏移
value_kind Utf8 可读值类型
value_index UInt32? 该值引用的索引,按 value_kind 解释(与 call_site_args.value_index 相同)
value_i64 Int64? 可表示为整数的标量值
value_f64 Float64? 可表示为浮点数的标量值

encoded_array_owners

把 encoded array 偏移关联回已知 owner,例如 class static values 或 call site。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
encoded_array_off UInt32 encoded array 起始偏移
owner_kind Utf8 owner 类型,例如 class_static_values 或 call_site
owner_idx UInt32 owner 的索引,例如 class idx 或 call site idx

hiddenapi_flags

Android hidden API metadata。只在 dex 携带对应 hiddenapi 数据时有行。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 所属类索引
ordinal UInt32 hiddenapi flag 在该类成员展开顺序中的编号
member_kind Utf8 成员大类,通常为 field 或 method
member_idx UInt32 field id 或 method id 索引
flag UInt32 原始 hiddenapi flag 数值

代码与异常处理

code_items

方法实现的 code_item header 和布局信息。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
code_off UInt32 code_item 起始偏移
registers_size UInt32 方法使用的寄存器总数
ins_size UInt32 入参占用的寄存器 word 数
outs_size UInt32 out 寄存器 word 数
tries_size UInt32 try item 数量
debug_info_off UInt32 debug_info_item 偏移;dex 中没有时为 0
insns_size UInt32 指令区大小,单位为 16-bit code unit
insns_off UInt32 指令数组起始字节偏移
tries_off UInt32? try item 数组起始偏移;没有 try 时为 NULL
handlers_off UInt32? encoded catch handler list 起始偏移;没有 try 时为 NULL

try_items

方法 code_item 中的受保护指令范围。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
try_idx UInt32 try item 顺序
start_addr UInt32 try 范围起始指令地址,单位为 code unit
insn_count UInt32 try 范围长度,单位为 code unit
handler_off UInt32 catch handler 在 handler list 内的相对偏移

catch_handlers

展开 encoded_catch_handler_list 中的 typed catch 和 catch-all 条目。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
handler_idx UInt32 DexSQL 分配的 handler 顺序编号
handler_off UInt32 handler 在 handler list 内的相对偏移
ordinal UInt32 当前 handler 中 catch 条目的顺序
type_idx UInt32? 捕获异常类型索引;catch-all 为 NULL
addr UInt32 handler 起始指令地址,单位为 code unit
is_catch_all Boolean 是否为 catch-all 条目

调试信息

debug_info

方法级 debug_info_item 摘要。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
debug_info_off UInt32 debug_info_item 起始偏移
line_start UInt32 debug 状态机初始源码行号
parameters_size UInt32 debug header 中声明的参数数量

debug_parameters

debug header 中的方法参数名。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
debug_info_off UInt32 所属 debug_info_item 偏移
ordinal UInt32 参数顺序
name_idx UInt32? 参数名字符串索引;匿名参数为 NULL

debug_positions

debug 状态机产生的源码位置映射。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
debug_info_off UInt32 所属 debug_info_item 偏移
ordinal UInt32 位置记录顺序
address UInt32 指令地址,单位为 code unit
line Int32 源码行号
source_file_idx UInt32? 当前 source file 字符串索引
prologue_end Boolean 该位置是否带有 prologue end 状态
epilogue_begin Boolean 该位置是否带有 epilogue begin 状态

debug_locals

debug 状态机中的 local variable 事件。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
debug_info_off UInt32 所属 debug_info_item 偏移
ordinal UInt32 local 事件顺序
address UInt32 事件发生的指令地址,单位为 code unit
event Utf8 local 事件类型,例如 start、end、restart
register_num UInt32 local 变量所在寄存器编号
name_idx UInt32? local 名字符串索引
type_idx UInt32? local 类型索引
signature_idx UInt32? local 泛型签名字符串索引

debug_opcodes

逐条暴露 debug 状态机字节码,以及执行该 opcode 后的状态。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 方法索引
debug_info_off UInt32 所属 debug_info_item 偏移
ordinal UInt32 debug opcode 顺序
opcode_off UInt32 debug opcode 起始偏移
opcode_end_off UInt32 debug opcode 结束偏移
opcode UInt32 原始 debug opcode 数值
address UInt32 执行后状态机中的指令地址
line Int32 执行后状态机中的源码行号
address_diff UInt32? 本条 opcode 带来的地址增量
line_diff Int32? 本条 opcode 带来的行号增量
register_num UInt32? 本条 opcode 涉及的寄存器编号
name_idx UInt32? 本条 opcode 涉及的名称字符串索引
type_idx UInt32? 本条 opcode 涉及的类型索引
signature_idx UInt32? 本条 opcode 涉及的签名字符串索引
source_file_idx UInt32? 本条 opcode 设置的 source file 字符串索引
emits_position Boolean 该 opcode 是否产生源码位置记录
emits_local Boolean 该 opcode 是否产生 local variable 事件

注解结构

annotation_directories

类 annotation directory 的摘要。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 声明类的类型索引
annotations_off UInt32 annotation directory 起始偏移
class_annotations_off UInt32? 类自身 annotation set 偏移
fields_size UInt32 field annotation entry 数量
methods_size UInt32 method annotation entry 数量
parameters_size UInt32 parameter annotation entry 数量

annotation_directory_entries

annotation directory 中 field、method、parameter 三类 entry 的统一展开。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 声明类的类型索引
annotations_off UInt32 annotation directory 起始偏移
entry_kind Utf8 entry 类型,通常为 field、method 或 parameter
entry_idx UInt32 对应 field id 或 method id 索引
annotation_set_off UInt32? field/method annotation set 偏移
annotation_set_ref_list_off UInt32? parameter annotation set ref list 偏移

annotation_sets

原始 annotation_set_item 摘要。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_set_off UInt32 annotation set 起始偏移
size UInt32 annotation set 中 annotation 数量

annotation_set_entries

把 annotation set 拆成逐 annotation 引用行。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_set_off UInt32 所属 annotation set 偏移
ordinal UInt32 annotation 在 set 中的顺序
annotation_off UInt32 annotation item 偏移

annotation_set_ref_lists

参数 annotation 使用的 annotation_set_ref_list 摘要。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_set_ref_list_off UInt32 annotation set ref list 起始偏移
size UInt32 ref list 中参数位置数量

annotation_set_refs

把参数 annotation ref list 拆成逐参数位置行。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
annotation_set_ref_list_off UInt32 所属 annotation set ref list 偏移
ordinal UInt32 参数位置顺序
annotation_set_off UInt32? 该参数位置的 annotation set 偏移;没有 annotation 时为 NULL

字节码引用与摘要

method_refs

方法字节码中的低层稀疏引用表。每行代表某个方法中一条带 dex 索引引用的指令。它保留引用类型和原始索引,不负责把目标解析成字符串、字段或方法 descriptor。普通特征查询优先使用语义视图(string 类型用 method_strings,method 类型用 method_calls,field 类型用 method_field_accesses,type 类型用 method_used_types)。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 调用方方法索引
index_kind Dictionary(Int8, Utf8) 引用索引类型,例如 string、type、field、method、proto
index UInt32 指令引用的原始 dex 索引
using_type Utf8? 字段读取为 get,写入为 put;其余为 NULL。

method_numbers

方法字节码中立即数常量的低层逐指令表——method_using_numbers 视图的原始来源。每行代表一条加载常量的指令;与 method_refs 不同,其数值是指令固有的,而非 dex 索引引用。特征查询优先使用 method_using_numbers 视图,它会解析出使用方方法的 descriptor。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
class_idx UInt32 DEX 内声明类的 type 索引。
method_idx UInt32 使用方方法索引
opcode UInt32 常量指令的 opcode 数值
number_type Dictionary(Int8, Utf8) 数值类型,例如 byte、short、int、long、float、double
long_value Int64 整数值(符号扩展),或 float/double 的原始位模式
double_value Float64? 浮点值;byte/short 为 NULL

method_opcodes

按 (file_id, method_idx) 标识的方法 opcode 摘要,每个 method_ids 行一行,为 methods 的 opcode 列提供数据。需要准备 opcode 数据。本 dex 只引用的方法两个 opcode 列均为 NULL;已定义但没有 code item 的方法为 0 / ''。

字段 类型 含义
file_id UInt32 所属 dex 文件编号
method_idx UInt32 method id 索引(method_ids.method_idx)
opcode_count UInt32? 解码出的 Dalvik 指令条数;仅引用方法为 NULL
opcode_hex Utf8View? opcode 序列的紧凑十六进制字符串;仅引用方法为 NULL

Copyright (c) 2026 LSPosed Developers。本文档采用 MIT 许可证。