#861·ctf-wiki

Android Dex结构体定义不准确

Author: hzshangCreated Mar 14, 2023Updated Sep 30, 2024

https://ctf-wiki.org/android/basic_operating_mechanism/java_layer/dex/dex/#class-def wiki上展示的DexClassDataHeader结构体是下面的定义

struct DexClassDataHeader {
    u4 staticFieldsSize;  /* 静态字段个数 */
    u4 instanceFieldsSize; /* 实例字段个数 */
    u4 directMethodsSize;  /* 直接方法个数 */
    u4 virtualMethodsSize; /* 虚方法个数 */
};

不过根据Android文档 https://source.android.com/docs/core/runtime/dex-format?hl=zh-cn#class-data-item 这里的header定义类型应该为ueb128

名称 格式 说明
static_fields_size uleb128 此项中定义的静态字段的数量
instance_fields_size uleb128 此项中定义的实例字段的数量
direct_methods_size uleb128 此项中定义的直接方法的数量
virtual_methods_size uleb128 此项中定义的虚拟方法的数量