whi*_*ark 7 flash actionscript-3 avm2
我最近为AVM2/AS3制作了一个反编译器,我注意到Flash编译器往往会发出大量不必要的代码.例如,对于某个应用程序,我删除了大约10%的代码而没有任何功能损害.它只是一个肯定死的代码,没有被条件操作码和异常处理块引用.
另外,请看这个片段:
...
313 setproperty y
315 getlocal 12
317 returnvalue
318 jump L9
L3:
322 getlocal 8
324 returnvalue
L9:
325 jump L10 ; L10 (opcode #331) does not ever exist.
; Technically, it is a jump beyond
; the end of function. This is invalid code!
L2:
329 pushnull
330 returnvalue
Run Code Online (Sandbox Code Playgroud)
好吧,当然这是无效的代码,它也是死的,因此不会造成任何不利影响(代码库膨胀除外).但为什么它会发出那些代码呢?为什么验证者会接受?
ASC或compc不优化.这是不幸的,但理论是JIT完成了所有的优化工作.您可以提出更糟糕的例子,例如添加两个常量.所以答案是:对不起,它只是没有优化.将来可能会有更好的编译器.现在你必须依靠AS3 JIT在运行时进行优化工作(它在做得不错!)或者使用不同的编译器.
归档时间: |
|
查看次数: |
1915 次 |
最近记录: |