Closed alviszh closed 1 week ago
感谢反馈,这两天看一下
我看现在 constant_pool
长度的计算是 sizeof(uchar) * constant_pool_size
,也就是 constant_pool_size
那么多个字节呀。有这里解析出错的样本吗?
modules1.zip 以最后一个class (com.example.native/entry/ets/util/PermissionUtil)的最后一个method (reqPermissionsFromUser)为例,constant_pool_size为145(字节),constant_pool数组元素个数实际为109因为并非每个constant (uleb128格式)都是1字节。
哦,是这样的,我没有把 constant_pool
当成 uleb128
的数组来处理,我当时偷懒直接当成字节数组(相当于 C 语言 unsigned char constant_pool[constant_pool_size]
)了。所以你看到的模板解析的元素个数不是 uleb128
的个数,而是字节数,从机器角度来讲长度是一样的,但是从人的角度有点让人误会,而且常量类型是 uleb128
也没有体现。这个我有空再修一下,感谢指出。
比较细节也影响不大。 感谢这个模板,对分析字节码文件结构帮助很大 👍
已修复,issue 关了
constant_pool_size是指constant_pool所占空间的长度,并不是constant_pool元素个数。现有逻辑解析这部分数据不对