AVM2-as3.0的运行机制,靠实践摸索的

一般的,写完了一个swf,只知道怎么写,应该怎么写,这是程序员的基本想法。但是不会考虑到虚拟机会怎么解读咱写的swf。又是个什么原理呢。下面,做一些实验,一步一步来!

查看一个正常的swf,弄一个比较简单的即可,就是我一直用的helloworld的swf,如图:

AVM2-as3.0的运行机制,靠实践摸索的_第1张图片

除了头部信息(swf,版本,大小,宽高,帧频,帧数),首先虚拟机要解析的就是第一个标签,FileAttributes,这里包含很多东西,例如语言版本,是否使用硬件加速等。

然后就是下面的一些tag,第2个标签是记录的文件生成的时间,和实用工具等。第3个是这个swf的背景颜色,第4个是stage上的帧标签。然后接着的是第二大部分,这一块是把动态文本加入到stage中,placeObject2是关键,它是确定动态文本的位置,大小,控制显示。

DoABC,就是代码部分,如果把这个分离了,就是拿出来,这个肯定是跑不起来的,但是用一个壳子把它再次的加载起来,就可以了,因为只要在内存中,当虚拟机跑起来,能拿到就可以。

SymbolClass,这个标签也很关键,它可以确定谁是文档类,才可以启动。ShowFrame的意思是一帧,常理,每个swf最少有一帧。如果有很多的帧,就有很多的Showframe.End表示swf结束了。

再说明一下doswf的分离原理:DoABC拿出来,当运行没有doabc的swf的时候,自然就找不到代码了。解决方法,手动的把这个标签插入进去,就是获取这些字节什么的,doabc整个的插进去,要注意位置,要在调用前,否则就找不到了。第二种就是写个壳子,先load没有doabc的swf,然后同时把doabc的swf一起的load到同一个loadinfo中,再addChild,即可。

图例,无SymbolClass和FileAttributes的时候:程序不能正常运行:

AVM2-as3.0的运行机制,靠实践摸索的_第2张图片

无DoABC的时候:

AVM2-as3.0的运行机制,靠实践摸索的_第3张图片

你可能感兴趣的:(AVM2-as3.0的运行机制,靠实践摸索的)