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

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

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

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的时候:程序不能正常运行:

2

无DoABC的时候:

3

转载于:https://my.oschina.net/zhyuliang/blog/206077

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值