SWF结构解析之DoABC

一直想写一个DoABC的解析,不过是一个比较大的工程,接上次的这个test.swf,继续
Doabc.png
选中的部分就是要解析的DoABC,这个标签是存储as3.0代码的地方,下面看一下结构:
doabc_tag.png
先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为长类型,接着读取,u32,F0 01 00 00 ,就为01 F0,十进制为496个字节,内容长度。

Flags,u32,01 00 00 00,flags = 01 00 00 00 = 00 00 00 01 =1

Name,String,为00.

ABCData,byte[],由10 00 2E … … … … 47 00 00,这部分为代码块。即DoABC的数据部分。

下面看下DoABC的结构:
doabc_str.png

u16 minor_version,10 00,minor_version = 00 10 = 16

u16 major_version,2e 00,major_version = 00 2e = 46


下面的 cpool_info constant_pool:
cpool_info.png
u30 int_count,00,即没有int

即s32 integer[int_count],也不存在了

u30 uint_count,00,也没有

即u32 integer[uint_count],也不存在了

u30 double_count,00,也没有

d64 double[double_count],不存在

u30 string_count,18 = 24个string字符串

string_info string[string_count]:结构如下:
string_info.png
举几个string的例子:

08 74 65 73 74 5F 66 6C 61 0C 4D 61 … … … …

u30 size , 08 ,8个字节

u8 utf8[8] = 74 65 73 74 5F 66 6C 61 =test_fla

继续:

0C 4D 61 69 6E 54 69 6D 65 6C 69 6E 65 0D .. .. .. …

u30 size , 0C,12个字节

u8 utf8[12] = 4D 61 69 6E 54 69 6D 65 6C 69 6E 65 0D  = MainTimeline

… … … … …

一直到 53 70 72 69 74 65 = Sprite
如下:

    <stringList count="24">
                <string value="test_fla"/>
                <string value="MainTimeline"/>
                <string value="flash.display"/>
                <string value="MovieClip"/>
                <string value="test_fla:MainTimeline"/>
                <string value=""/>
                <string value="txt"/>
                <string value="flash.text"/>
                <string value="TextField"/>
                <string value="frame1"/>
                <string value="HelloWorld!"/>
                <string value="text"/>
                <string value="x"/>
                <string value="y"/>
                <string value="addChild"/>
                <string value="addFrameScript"/>
                <string value="Object"/>
                <string value="flash.events"/>
                <string value="EventDispatcher"/>
                <string value="DisplayObject"/>
                <string value="InteractiveObject"/>
                <string value="DisplayObjectContainer"/>
                <string value="Sprite"/>

    </stringList>

在上两张图:
string_asv.png

u30 namespace_count,08,就是有8个namespace
namespace_info namespace[namespace_count],结构
namespace_info.png
同String,
u8 kind,16
u30 name,01

Namespace Kind.png
kind = 0×16 = CONSTANT_PackageNamespace,说明他是一个包名字,对应的名字是string池中的01,即为test_fla
继续 u8 kind,16
u30 name,03,kind = 0×16 = CONSTANT_PackageNamespace,说明他是一个包名字,对应的名字是string池中的03,即为flash.display
一直到 16 12,
u8 kind,16
u30 name,12,kind = 0×16 = CONSTANT_PackageNamespace,说明他是一个包名字,对应的名字是string池中的,18即为flash.events


    <namespace_infoList count="8">
                <namespace_info class="Namespace_info" kind="PackageNamespace" name="1"/>
                <namespace_info class="Namespace_info" kind="PackageNamespace" name="3"/>
                <namespace_info class="Namespace_info" kind="ProtectedNamespace" name="5"/>
                <namespace_info class="Namespace_info" kind="PackageNamespace" name="6"/>
                <namespace_info class="Namespace_info" kind="PackageNamespace" name="8"/>
                <namespace_info class="Namespace_info" kind="PackageInternalNs" name="1"/>
                <namespace_info class="Namespace_info" kind="PackageNamespace" name="18"/>
    </namespace_infoList>

ns_asv.png


u30 ns_set_count ,00,表示没有
即ns_set_info ns_set[ns_set_count],也没有
u30 multiname_count,11,有17个multiname
multiname_info multiname[multiname_count],如图

multiname.png


u8 kind,0×07,即07,CONSTANT_QName
u8 data[],关于Qname,如下:

qname.png
u30 ns,0×01 ,即为ns中的01,test_fla
u30 name,0×02,在String中的02,MainTimeline
继续,u8 kind,0×07,即07,CONSTANT_QName
u8 data[]:
    u30 ns,0×01 ,即为ns中的02,flash.display
    u30 name,0×02,在String中的04,MovieClip


    <multiname_infoList count="17">
                <multiname_info class="Multiname_info" kind="QName" ns="1" name="2"/>
                <multiname_info class="Multiname_info" kind="QName" ns="2" name="4"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="7"/>
                <multiname_info class="Multiname_info" kind="QName" ns="5" name="9"/>
                <multiname_info class="Multiname_info" kind="QName" ns="6" name="10"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="12"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="13"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="14"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="15"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="16"/>
                <multiname_info class="Multiname_info" kind="QName" ns="4" name="17"/>
                <multiname_info class="Multiname_info" kind="QName" ns="7" name="19"/>
                <multiname_info class="Multiname_info" kind="QName" ns="2" name="20"/>
                <multiname_info class="Multiname_info" kind="QName" ns="2" name="21"/>
                <multiname_info class="Multiname_info" kind="QName" ns="2" name="22"/>
                <multiname_info class="Multiname_info" kind="QName" ns="2" name="23"/>
    </multiname_infoList>

复制代码mn_asv.png



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SWFTools is a collection of utilities for working with Adobe Flash files (SWF files). The tool collection includes programs for reading SWF files, combining them, and creating them from other content (like images, sound files, videos or sourcecode). SWFTools is released under the GPL. The current collection is comprised of the programs detailed below: • PDF2SWF A PDF to SWF Converter. Generates one frame per page. Enables you to have fully formatted text, including tables, formulas, graphics etc. inside your Flash Movie. It's based on the xpdf PDF parser from Derek B. Noonburg. • SWFCombine A multi-function tool for inserting SWFs into Wrapper SWFs, contatenating SWFs, stacking SWFs or for basic parameter manipulation (e.g. changing size). • SWFStrings Scans SWFs for text data. • SWFDump Prints out various informations about SWFs, like contained images/fonts/sounds, disassembly of contained code as well as cross-reference and bounding box data. • JPEG2SWF Takes one or more JPEG pictures and generates a SWF slideshow from them. Supports motion estimation compression (h.263) for better compression of video sequences. • PNG2SWF Like JPEG2SWF, only for PNGs. • GIF2SWF Converts GIFs to SWF. Also able to handle animated gifs. • WAV2SWF Converts WAV audio files to SWFs, using the L.A.M.E. MP3 encoder library. • AVI2SWF Converts AVI animation files to SWF. It supports Flash MX H.263 compression. Some examples can be found at examples.html. (Notice: this tool is not included anymore in the latest version, as ffmpeg or mencoder do a better job nowadays) • Font2SWF Converts font files (TTF, Type1) to SWF. • SWFBBox Allows to read out, optimize and readjust SWF bounding boxes. • SWFC A tool for creating SWF files from simple script files. Includes support for both ActionScript 2.0 as well as ActionScript 3.0. • SWFExtract Allows to extract Movieclips, Sounds, Images etc. from SWF files. • AS3Compile A standalone ActionScript 3.0 compiler. Mostly compatible with Flex. SWFTools

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值