注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

过☆客

一颗迷茫的心在3D世界中飘荡...

 
 
 

日志

 
 
关于我

爱宁静,不爱喧闹, 爱奋斗,也爱自由, 爱顺其自然,爱独来独往, 没高学历,不算成功, 没车也没房,但我真诚, 走进你的世界,却不留痕迹, 我是过客,不只是过客...

 
 

swf文件格式解析——标签  

2013-05-16 20:29:45|  分类: 日积月累-AS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    前面将了swf文件前21个字节,包括文件头和基本属性。21字节之后的就是一系列的标签了,了解xml的都知道,一个标签中可以定义不同数量和大小的属性和数据,swf的标签也类似。
swf文件格式解析——标签 - 过☆客 - 过☆客
 标签有定义型标签和控制型标签两类:
定义型标签把对象定义为角色存储在字典里,如Shapes、文本、位图、声音等等。每一个标签会为定义的内容分配一个唯一的编号称做角色编号(character ID)。之后Flash Player 将角色(character)存储在称作字典(dictionary)的仓库。定义型标签本身不产生渲染。
控制型标签创建和操作已渲染的字典中角色的实例,同时控制文件流程。

SWF文件的处理过程
      Flash Player会处理所有的标签直到遇到ShowFrame 标签。此时,显示列表被复制到屏幕,然后播放器继续处理直到下一帧需要显示。第一帧的内容累计了第一个ShowFrame标签之前所有控制型标签的执行结果,第二帧的内容累计从文件开始到第二个ShowFrame标签的所有控制标签的执行效果,以此类推。

长标签和短标签
每一个标签的开始都是标签的类型和长度。标签头可以是短标签头类型也可以是长标签头类型。短标签头类型用于数据在62 字节之内的标签。如果标签的数据长度不超过62 个字节使用短标签。而长标签头类型可以用于数据在4G 之内的任何标签。

标签头记录(短类型)
 字段类型说明 
 TagCodeAndLengthUI16(两个字节) 高10位表示标签类型
低6位表示标签长度 
  
注意事项:
TagCodeAndLength 字段是一个两个字节的字,而不是一个10 位的字段跟随一个6位字段。SWF 使用低位在前(little-endian)造成上述两种情况是不同的。(ps:如果TagCodeAndLength 字段的十六进制是44 11 那么实际上的值是11 44 二进制为00010001 01000100前10 位的值是69 表示这是一个ileAttributes标签)标签的长度不包括标签头记录自己的长度,仅表示其后面数据的长度。

标签头记录(长类型)
 字段类型说明 
TagCodeAndLengthUI16(两个字节) 高10位表示标签类型 
低6位始终是0x3F,即111111
LengthSI32(有符号整型,四字节) 标签的长度
   
标签类型(具体参考《swf_file_format_spec_v10》书中的Tag value Tag name)

0 End
1 ShowFrame
2 DefineShape
4 PlaceObject
5 RemoveObject
6 DefineBits
7 DefineButton
8 JPEGTables
9 SetBackgroundColor
10 DefineFont
11 DefineText
12 DoAction
13 DefineFontInfo
14 DefineSound
15 StartSound
17 DefineButtonSound
18 SoundStreamHead
19 SoundStreamBlock
20 DefineBitsLossless
21 DefineBitsJPEG2
22 DefineShape2
23 DefineButtonCxform
24 Protect
26 PlaceObject2
28 RemoveObject2
32 DefineShape3
33 DefineText2
34 DefineButton2
35 DefineBitsJPEG3
36 DefineBitsLossless2
37 DefineEditText
39 DefineSprite
43 FrameLabel
45 SoundStreamHead2
46 DefineMorphShape
48 DefineFont2
56 ExportAssets
57 ImportAssets
58 EnableDebugger
59 DoInitAction
60 DefineVideoStream
61 VideoFrame
62 DefineFontInfo2
64 EnableDebugger2
65 ScriptLimits
66 SetTabIndex
69 FileAttributes
70 PlaceObject3
71 ImportAssets2
73 DefineFontAlignZones
74 CSMTextSettings
75 DefineFont3
76 SymbolClass
77 Metadata
78 DefineScalingGrid
82 DoABC
83 DefineShape4
84 DefineMorphShape2
86 DefineSceneAndFrameLabelData
87 DefineBinaryData
88 DefineFontName
89 StartSound2
90 DefineBitsJPEG4
91 DefineFont4


继续分析上次的那个swf中21字节之后的数据。
swf文件格式解析——标签 - 过☆客 - 过☆客
 
第一个标签是44 11 = 11 44 = 0001000101 000100
因为 000100 != 111111 所以是短格式, 而且这个标签的长度为 4 ,标签的类型为 69 为ileAttributes(文件属性),(貌似是从swf6之后第一个标签都是这个FileAttributes)内容是08 00 00 00
swf文件格式解析——标签 - 过☆客 - 过☆客
 
第二个标签是43 02 = 02 43 = 0000001001 000011
同样000011 != 111111 还是短格式标签,这个标签的长度为3.标签类型9(SetBackgroundColor)背景颜色,内容是FF FF FF白色

第三个标签BF 15 = 15 BF = 0001010110 111111
终于看到111111了,这是一个长标签。标签类型是56(ExportAssets),再从后面读四字节计算标签长度0C 00 00 00 = 00 00 00 0C = 12,有点小失望,怎么才12啊,这也说明,长标签中的长度是可以小于62的。之后的01 00 E5 9C BA E6 99 AF 20 31 00 00都是这标签的数据,具体什么都不说了吧,看附件中的那个《swf_file_format_spec_v10》

第四个标签FF 12...

中间的直接跳过吧,最后还有一个结束标签
记录头部:00 00 = 00 00 = 0000000000 000000
短标签:标签长度为0,标签类型为0
标签属性:End
标签头 加 内容(内容为空)为 :00 00
swf_file_format_spec_v10.rar(849.76K)   
下载
  评论这张
 
阅读(930)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018