通常的,寫完了一個swf,只知道怎麼寫,應該怎麼寫,這是程序員的基本想法。可是不會考慮到虛擬機會怎麼解讀咱寫的swf。又是個什麼原理呢。下面,作一些實驗,一步一步來!程序員
查看一個正常的swf,弄一個比較簡單的便可,就是我一直用的helloworld的swf,如圖:工具
除了頭部信息(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
無DoABC的時候:原理