- 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独立构建
- 已通过
- 不涉及,无需验证
- 编译(x64/arm64)
- UT
- test262
- workload
三、 Test262
- 已通过
- 不涉及,无需验证
四、 Runtime Core UT
- 已通过
- 不涉及,无需验证
其中disassembler_module_literal_test_007失败,经调查,改用例有问题,即便不带本修改也过不了,而在蓝区主干上能过。与本次提交无关
-
Host
-
Device
五、Fuzz编译测试
- 已通过
- 不涉及,无需验证
六、漏洞扫描UT
- 已通过
- 不涉及,无需验证证
七、Verifier测试
- 已通过
- 不涉及,无需验证
- UT
- 测试脚本
八、指令/abc格式修改自检,需联系下方邮箱,同步至相关领域
重要:涉及runtime_core仓abc2program、libpandafile、isa目录下的修改,必须提供一个编译helloworld项目的hap包给对应领域,并联系下方邮箱
- 涉及,已同步
- 不涉及
Email: chenqiuyao@huawei.com
No comments