吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2853|回复: 2
收起左侧

[Android 原创] dex文件格式------type_ids解析

[复制链接]
紫诺不离 发表于 2020-6-23 18:38

授人与鱼不如授人与渔,作为初学者,最重要的是学会查看官方文档,自主学习。

首先放上google官方文档对dex解释的链接,里面相当详细的介绍了dex的格式的组成。

https://source.android.google.cn/devices/tech/dalvik/dex-format#header-item
上一篇文章解析了type_ids,今天来解析dex中的字符串,老规矩,先来看官方文档的介绍。

header_item中对type描述的很清晰:

type_ids_size   uint    类型标识符列表中的元素数量,最多为 65535
type_ids_off    uint    从文件开头到类型标识符列表的偏移量;如果 type_ids_size == 0(不可否认是一种奇怪的极端情况),则该值为 0。该偏移量(如果为非零值)应该是到 type_ids 区段开头的偏移量。

type_ids_size 记录了标识符的数量 4字节大小

type_ids_off记录了type_ids区段开头的偏移量 4个字节大小

type_ids区段格式:

type_ids    type_id_item[]

type_id_item格式:

descriptor_idx  uint    此类描述符字符串的 string_ids 列表中的索引。该字符串必须符合上文定义的 TypeDescriptor 的语法。

可以看到type_id_item结构非常简单,就是一个int类型的数组。这个数组记录了上篇文章中string_ids的索引。

定义结构体

typedef struct _IMAGE_TYPE_ITEM
{
    DWORD type_idx; //ushort    type_ids 列表中的索引
}IMAGE_TYPE_ITEM, * PIMAGE_TYPE_ITEM;
定义结构体只是为了看着清晰一点,便于理解

开始解析

header_item获取这里就不在讲述了,header_item->type_ids_size得到数组的个数,通过header_item->type_ids_off来获取偏移,与开始相加就得到了数组指针,有了数组指针,遍历数组很简单,这里不开展。

下面看代码:

//第一个参数 header_item 头部指针
//第二个参数 virtualAddress_string 字符串指针
//第三个参数 virtualAddress_type  上面定义的结构体指针
//第四个参数 index  索引获取第几个的值
char* getString(PIMAGE_DEX_HEADER IpParameter, PDWORD virtualAddress_string, PIMAGE_TYPE_ITEM virtualAddress_type, DWORD index)
{
    return getString(IpParameter, virtualAddress_string, (virtualAddress_type + index)->type_idx);
}

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
boclover + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pantherTL 发表于 2020-6-24 09:40
感谢分享,学到了新的知识。
pantherTL 发表于 2020-7-12 10:09
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 12:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表