加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SWF结构解析之DoABC

发布时间:2020-12-15 18:12:36 所属栏目:百科 来源:网络整理
导读:一直想写一个DoABC的解析,不过是一个比较大的工程,接上次的这个test.swf,继续 选中的部分就是要解析的DoABC,这个标签是存储as3.0代码的地方,下面看一下结构: 先解析开始的 BF 14,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为
一直想写一个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,也没有

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

u30 double_count,也没有

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,03,kind = 0×16 = CONSTANT_PackageNamespace,说明他是一个包名字,对应的名字是string池中的03,即为flash.display
一直到 16 12,
u8 kind,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,表示没有
即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,即07,CONSTANT_QName
u8 data[]:
? ? u30 ns,即为ns中的02,flash.display
? ? u30 name,在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读