4.2.abcFile
abcFile
{
u16 minor_version
u16 major_version
cpool_info constant_pool
u30 method_count
method_info method[method_count]
u30 metadata_count
metadata_info metadata[metadata_count]
u30 class_count
instance_info instance[class_count]
class_info class[class_count]
u30 script_count
script_info script[script_count]
u30 method_body_count
method_body_info method_body[method_body_count]
}
abcFile结构描述了一个包含其常量数据,类型描述符,代码,元数据的可执行代码块,它包括以下字段:
minor_version, major_version
major_version和minor_version的值是abcFile格式主要和次要版本号。次要版本号表明文件格式向后兼容,AVM2仍然可以使用旧版本的文件。主要版本号表示文件格式不再向后兼容。
constant_pool
constant_pool是包含整数,浮点数,字符串,名称空间,名称空间集,multiname的变长结构。这些常量被abcFile的其他部分引用。
method_count, method
method_count的值是method数组中的所有项。method数组中的每一项都是变长的method_info结构。这个数组保存abcFile定义的全部方法信息。方法体代码保存在另外的method_body数组里。有些方法可能没有方法体,比如本地方法(native method)。
metadata_count, metadata
metadata_count是metadata数组中项的数目。每个metadata项是将名称映射到字符串值集的metadata_info结构。
class_count, instance, class
class_count是instance和class数组中的项的数目。
每个instance项是指定由特定类创建的实例对象特征的instance_info结构。
每个class项表示一个类的特征。它与instance字段连接形成一个AS类的完整描述。
script_count, script
script_count是script数组中项的数目。每个script项是定义文件中单脚本特征的script_info结构。数组中最后一项是执行abcFile的入口点。
method_body_count, method_body
method_body_count是method_body数组中项的数目。每个method_body项由包括单个方法或函数的全部指令的变长method_body_info组成。