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,这个标签是存储as3.0代码的地方,下面看一下结构: 先解析开始的 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的结构: u16 minor_version,10 00,minor_version = 00 10 = 16 u16 major_version,2e 00,major_version = 00 2e = 46 下面的 cpool_info constant_pool: 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的例子: 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> 在上两张图: u30 namespace_count,08,就是有8个namespace 同String, u8 kind,16 u30 name,01 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> u30 ns_set_count,表示没有 即ns_set_info ns_set[ns_set_count],也没有 u30 multiname_count,11,有17个multiname multiname_info multiname[multiname_count],如图 u8 data[],关于Qname,如下: 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> 复制代码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 靓号正则表达式(前后向查找等) 和 apache正则包使用
- oracle数据文件(表空间文件)被rm掉了。表空间如何删除
- c# – 如何为GoogleWebAuthorizationBroker.AuthorizeAsync
- 详解vue-cli + webpack 多页面实例应用
- Flutter 中渐变的高级用法
- C# 对Outlook2010进行二次开发的图文教程
- [oracle]外部表创建
- ruby-on-rails-3 – 基础,简单形式,文本区域,列
- ruby-on-rails – 把东西变成物体我有多疯狂?
- ruby-on-rails – Ruby on Rails中的send_data与Spreadshee