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

相關文章
相關標籤/搜索