1. Delete redundate strings in abc

Issue

描述/Description

混淆后需要删除冗余字符串

原因/Reason

abc中记录了strings,但因为混淆,部分混淆前的字符串留在strings中没有删除。造成了冗余。删除后可降低包体大小。

修改方案/Scheme

原有的program中记录了存放strings的set,在emit阶段会遍历此set并记录进string_item,并最终落盘abc。
混淆时,会通过abc转换为program,对program中对应的内容进行混淆。原先一部分可能存于strings中的内容被混淆,混淆后的string加入strings,但由于无法确认混淆前的sting是否有其他地方引用,因此没有删除,造成包体大小变大。
而由于混淆阶段没有遍历所有abc中的内容,因此无法判断。为了防止性能开销,移入emit阶段做。

emit时,原先的做法是遍历strings,将其内容记录进string_item。现在改为emit阶段不读取strings,在生成function_item时,遍历每个指令重新收集strings。
因此原先的strings实际上已无用。但由于删除program中的strings修改较大,牵涉面可能较广,需要充分评审,因此不在本次修改中修改(此优化可能可以略微降低编译的耗时,并且降低strings占用的内存)。该修改会造成的影响是对比修改前的strings的顺序和offset会重新计算,但多次生成abc则不会变化。

经测试,某测试应用修改前后性能影响
修改前:
编译总时间:4min 47s 172ms
混淆耗时: 1min 08s 918ms
修改后:
编译总时间:4min 09s 124ms
混淆耗时: 1min 09s 931ms
经多次测试,修改后的时间差异属于误差范围(有时修改后耗时更低),对时间性能几乎无影响。

测试项

当前GGW中未添加的测试套(请在本地进行验证)

1.Fuzz编译测试

./build.sh --product-name rk3568 --build-target arkcompiler/runtime_core/tests/fuzztest:fuzztest

输入图片说明
其中disassembler_module_literal_test_007失败,经调查,改用例有问题,即便不带本修改也过不了,而在蓝区主干上能过。与本次提交无关

2."runtime_core/libpandabase/tests:host_unittest"
release模式:

./build.sh --product-name rk3568 --build-target runtime_core_host_unittest

输入图片说明
debug模式:

./build.sh --product-name rk3568 --build-target runtime_core_host_unittest --gn-args is_debug=true

输入图片说明

一、Compile Target
  • 已通过
  • 不涉及,无需验证
二、Ark独立构建
  • 已通过
  • 不涉及,无需验证
  1. 编译(x64/arm64)
  2. UT
  3. test262
  4. workload
三、 Test262
  • 已通过
  • 不涉及,无需验证
    输入图片说明
四、 Runtime Core UT
  • 已通过
  • 不涉及,无需验证
    输入图片说明
    其中disassembler_module_literal_test_007失败,经调查,改用例有问题,即便不带本修改也过不了,而在蓝区主干上能过。与本次提交无关
  1. Host

  2. Device

五、Fuzz编译测试
  • 已通过
  • 不涉及,无需验证
六、漏洞扫描UT
  • 已通过
  • 不涉及,无需验证证
七、Verifier测试
  • 已通过
  • 不涉及,无需验证
  1. UT
  2. 测试脚本
八、指令/abc格式修改自检,需联系下方邮箱,同步至相关领域

重要:涉及runtime_core仓abc2program、libpandafile、isa目录下的修改,必须提供一个编译helloworld项目的hap包给对应领域,并联系下方邮箱

  • 涉及,已同步
  • 不涉及

Email: chenqiuyao@huawei.com