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

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

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

1

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

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

DoABC,就是代码部分,若是把这个分离了,就是拿出来,这个确定是跑不起来的,可是用一个壳子把它再次的加载起来,就能够了,由于只要在内存中,当虚拟机跑起来,能拿到就能够。文档

SymbolClass,这个标签也很关键,它能够肯定谁是文档类,才能够启动。ShowFrame的意思是一帧,常理,每一个swf最少有一帧。若是有不少的帧,就有不少的Showframe.End表示swf结束了。get

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

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

2

无DoABC的时候:原理

3

相关文章
相关标签/搜索