hx1997 / ark-bytecode-010editor-template

010Editor template for .abc (Open/HarmonyOS Ark Bytecode) files
MIT License
34 stars 5 forks source link

constant_pool_size错误 #3

Closed alviszh closed 1 week ago

alviszh commented 3 weeks ago

constant_pool_size是指constant_pool所占空间的长度,并不是constant_pool元素个数。现有逻辑解析这部分数据不对

hx1997 commented 3 weeks ago

感谢反馈,这两天看一下

hx1997 commented 3 weeks ago

我看现在 constant_pool 长度的计算是 sizeof(uchar) * constant_pool_size,也就是 constant_pool_size 那么多个字节呀。有这里解析出错的样本吗?

alviszh commented 3 weeks ago

modules1.zip 以最后一个class (com.example.native/entry/ets/util/PermissionUtil)的最后一个method (reqPermissionsFromUser)为例,constant_pool_size为145(字节),constant_pool数组元素个数实际为109因为并非每个constant (uleb128格式)都是1字节。

hx1997 commented 3 weeks ago

哦,是这样的,我没有把 constant_pool 当成 uleb128 的数组来处理,我当时偷懒直接当成字节数组(相当于 C 语言 unsigned char constant_pool[constant_pool_size])了。所以你看到的模板解析的元素个数不是 uleb128 的个数,而是字节数,从机器角度来讲长度是一样的,但是从人的角度有点让人误会,而且常量类型是 uleb128 也没有体现。这个我有空再修一下,感谢指出。

alviszh commented 3 weeks ago

比较细节也影响不大。 感谢这个模板,对分析字节码文件结构帮助很大 👍

hx1997 commented 1 week ago

已修复,issue 关了